正确接管日期以选择搜索条件

时间:2015-11-30 20:18:46

标签: excel-vba vba excel

我尝试通过表单上的组合框(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不会接管日期,但是当我在过滤器中手动执行它时,它可以工作。有人知道如何改进代码,它始终有效吗?

1 个答案:

答案 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