首页 > 解决方案 > 运行自动过滤 VBA 宏并弹出输入日期

问题描述

我对整个 VBA/Excel 宏的事情有点陌生,所以我正在尽我所能找到我需要的解决方案,到目前为止我做得很好 - 但最终走到了死胡同。

我有一个代码是自动筛选我的数据表,然后根据特定列排序(见下文)。

Sub FGReport()
    ActiveWorkbook.Worksheets("Sorted Report FG").ListObjects("Table25").Range.AutoFilter Field:=2, Criteria1:= "1085"
    ActiveWorkbook.Worksheets("Sorted Report FG").ListObjects("Table25").Range.AutoFilter Field:=4, Criteria1:= "<>$0"
    ActiveWorkbook.Worksheets("Sorted Report FG").ListObjects("Table25").Range.AutoFilter Field:=6, Criteria1:= "<1/1/2018", Operator:=xlAnd
    'ActiveWorkbook.Worksheets("Sorted Report FG").Range("Table25[[#Headers],[LastSoldDate]]").Select
    ActiveWorkbook.Worksheets("Sorted Report FG").ListObjects("Table25").Sort. SortFields.Clear
    ActiveWorkbook.Worksheets("Sorted Report FG").ListObjects("Table25").Sort. SortFields.Add2 Key:=Range("Table25[LastSoldDate]"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sorted Report FG").ListObjects("Table25").Sort. SortFields.Add2 Key:=Range("Table25[TotalInventoryValue]"), SortOn:= xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sorted Report FG").ListObjects("Table25").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

代码自动过滤日期的位置(第 4 行)。我希望它提示用户手动输入日期。我认为使用 UserForm 执行此操作是最合适的(下图)

图像1

我只是不知道如何在该行代码中提示用户窗体出现,并通过输入日期、单击 Enter 来使其发挥作用,然后继续运行原始的 FGReport() 宏。

如果需要更多信息,请告诉我!谢谢!

标签: excelvbabuttonuser-inputuserform

解决方案


最初我会推荐一个输入框并检查输入是否有效:

Dim myDate as String

myDate = InputBox("Please enter a date (dd/mm/yyyy)", "Date filter", Format(Now() - 7, "dd/mm/yyyy"))

If IsDate(myDate) Then
   ' Continue with logic
Else
    MsgBox "Invalid date"
End If

请注意,IsDate 是一个非常不稳定的函数,但如果您认为合适,您可以继续使此代码更漂亮。


推荐阅读