2016-03-29 82 views
3

Hala Excel VBA'yı öğreniyorum ve eğer herkes bu hakkı elde etmeme yardım ederse memnun olurum. DateMaster adlı bir sayfada belirtilen bir startDate ve endDate I temelinde bir tarih sütunu filtrelemek istiyorum. Makroyu çalıştırdığımda, Çalışma Zamanı Hatası 13, Başlangıç ​​Tarihi = 0'ı verir. Aşağıda kodum. Eğer Long olarak StartDate ve EndDate ayarlarsanızExcel VBA - Bir tarih kümesinde bir tarih sütunu otomatik filtreleme

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

Kodunuzu kullanarak 'F8' kullanarak adım atmayı denediniz mi? Ayrıca, kodunuzda seçim yapmayı ve etkinleştirmeyi tercih ederim. [Bu yazı nasıl açıklıyor] (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros). Bu hatayı alıyorsunuz, çünkü bir tür uyuşmazlığı. – Dan

+2

(1) Bir tarihi bir değişkene kaydetmek istiyorsanız, o zaman şöyle kaydedebilirsiniz: 'Dim StartDate As Date '. (2) Hata mesajı oldukça açık. Neden C2 hücresinin gerçekten geçerli bir tarih olup olmadığını kontrol etmiyorsunuz. (3) Bir tarih varsa bile ekleyerek onaylamak isteyebilirsiniz: Eğer IsDate (ThisWorkbook.Worksheets ("DateMaster"). Aralığı ("C2"). Değer) Daha sonra 'tarih ve atamadan önce' hata ayıklama .Print StartDate' sadece değişkeni atadıktan sonra. – Ralph

+1

Dim Çalıştırma Başlangıcı olarak çalıştı, dizgi değil. Teşekkürler beyler!!! –

cevap

1

, sen Aksi

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

AutoFilter

de CDate komutunu kullanın Date olarak her iki değişkenleri tanımlamak gerekir.