我尝试通过表单上的组合框(Periode)让人们选择2个日期来搜索特定时期内的数据。所选日期用作在数据中搜索的选择标准。我是通过这段代码来完成的:
Private Sub Datumok_Click()
Dim AA1 As String
Dim AA2 As String
Dim AA3 As String
Dim AA4 As String
Dim AA5 As String
Dim AA6 As String
Dim LastRow As Single
AA1 = Me.dag1.Value
AA2 = Me.maand1.Value
AA3 = Me.jaar1.Value
AA4 = Me.dag2.Value
AA5 = Me.maand2.Value
AA6 = Me.jaar2.Value
Application.ScreenUpdating = False
Sheets("Feuil2").Select
LastRow = Cells(Rows.Count, "a").End(xlUp).Row
Sheets("Start").Range("F7") = AA2 & "-" & AA1 & "-" & AA3
Sheets("Start").Range("G7") = AA5 & "-" & AA4 & "-" & AA6
Sheets("Start").Range("F8") = AA1 & "-" & AA2 & "-" & AA3
Sheets("Start").Range("G8") = AA4 & "-" & AA5 & "-" & AA6
Unload Periode
Sheets("Feuil2").Select
ActiveSheet.AutoFilterMode = False
Range(Cells(1, 1), Cells(LastRow, 10)).Select
Selection.AutoFilter
ActiveSheet.Range(Cells(2, 3), Cells(LastRow, 3)).AutoFilter Field:=3, ActiveSheet.Range(Cells(2, 3), Cells(LastRow, 3)).AutoFilter Field:=3, Criteria1:=">=" & Sheets("Start").Range("F8"), Operator:=xlAnd, Criteria2:="<=" & Sheets("Start").Range("G8")
Cells(1, 1).Select
Sheets("Start").Select
Cells(8, 5).Value = "Ok"
'Wel blad updaten
Application.ScreenUpdating = True
End Sub
可能有点讨厌的代码。将选择放入细胞中,并将这2个细胞用作选择标准。 有时vba或Excel不会接管日期,但是当我在过滤器中手动执行它时,它可以工作。有人知道如何改进代码,它始终有效吗?
答案 0 :(得分:1)
良好的第一步是消除所有.Select
语句并直接使用您需要的对象。
下一步是删除代码中的3个(我认为).AutoFitler
语句,只使用一个。我已经重构了一些代码(并添加了一些注释,以便我可以显示我对代码的解释)。
Private Sub Datumok_Click()
Dim AA1 As String
Dim AA2 As String
Dim AA3 As String
Dim AA4 As String
Dim AA5 As String
Dim AA6 As String
Dim sSE As String
Dim sEE As String
Dim LastRow As Single
'start date
AA1 = Me.dag1.Value 'day
AA2 = Me.maand1.Value 'month
AA3 = Me.jaar1.Value 'year
'end date
AA4 = Me.dag2.Value 'day
AA5 = Me.maand2.Value 'month
AA6 = Me.jaar2.Value 'year
Application.ScreenUpdating = False
With Sheets("Start")
.Range("F7") = AA2 & "-" & AA1 & "-" & AA3
.Range("G7") = AA5 & "-" & AA4 & "-" & AA6
.Range("F8") = AA1 & "-" & AA2 & "-" & AA3
sSE = .Range("F8").Value2
.Range("G8") = AA4 & "-" & AA5 & "-" & AA6
sEE = .Range("G8").Value2
End With
Unload Periode
With Sheets("Feuil2")
.AutoFilterMode = False
LastRow = .Cells(.Rows.Count, "a").End(xlUp).Row
'filters columns A(1) through J(10) ... adjust based on your needs
.Range(Cells(1, 1), Cells(LastRow, 10)).AutoFilter Field:=3, Criteria1:=">=" & sSE, Operator:=xlAnd, Criteria2:="<=" & sEE
End With
With Sheets("Start")
.Select
.Cells(8, 5).Value = "Ok"
End With
'Wel blad updaten
Application.ScreenUpdating = True
End Sub