2016-03-29 14 views
3

ExcelのVBAをまだ学習しています。誰でもこの権利を得ることができれば感謝します。 DateMasterというシートで指定されたstartDateとendDateに基づいて日付列をフィルタリングしたいと思います。マクロを実行すると、ランタイムエラー13、開始日= 0が返されます。以下は私のコードです。Excel VBA - 日付の列に日付の列を入力します。

Sub FIlterCopy() 

Dim StartDate As Long 
Dim EndDate As Long 

StartDate = ThisWorkbook.Worksheets("DateMaster").Range("C2").Value 
EndDate = ThisWorkbook.Worksheets("DateMaster").Range("D2").Value 

Application.ScreenUpdating = False 

ThisWorkbook.Worksheets("FilterMaster").Activate 

Range("A:BA").Select 

Selection.ClearContents 

Application.Workbooks.Open ("C:\WRI\Data\Revenue Update.xls") 

Windows("Revenue Update.xls").Activate 

Range("A1").Select 
Range(Selection, Selection.End(xlToRight)).Select 
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select 
Selection.AutoFilter 
Selection.AutoFilter Field:=5, Criteria1:= _ 
"=Backlog", Operator:=xlOr, Criteria2:="=RMA" 
Selection.AutoFilter Field:=29, Criteria1:= _ 
"=Direct" 
Selection.AutoFilter Field:=20, Criteria1:=">=" & StartDate, Operator:=xlAnd, Criteria2:="<=" & EndDate 

Application.ScreenUpdating = True 

End Sub 
+0

あなたは 'F8'を使ってコードをステップ実行しようとしましたか?また、私はあなたのコードを選択して起動するのを避けるでしょう。 [この投稿はどのように説明しますか?](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros)。これは型の不一致であるため、このエラーが発生しています。 – Dan

+2

(1)変数に日付を格納したい場合は、 'Dim StartDate As Date'のように保存することができます。 (2)エラーメッセージはかなり明白です。セルC2に本当に有効な日付が含まれているかどうかを確認してください。 (3)Dateがあっても、If IsDate(ThisWorkbook.Worksheets( "DateMaster")。Range( "C2").Value)を追加すると、日付を割り当てる直前に 'Debug .Print StartDate'を実行してください。 – Ralph

+1

Dim文字列ではなく、作業日として開始します。みんなありがとう!!! –

答えて

1

あなたはLongとしてStartDateEndDateを設定した場合、あなたは、それ以外のオートフィルタ

Selection.AutoFilter Field:=20, Criteria1:=">=" & CDate(StartDate), Operator:=xlAnd, Criteria2:="<=" & CDate(EndDate) 

CDateコマンドを使用しDateとして両方の変数を定義する必要があります。

関連する問題