运行自动过滤器VBA宏,该弹出框可以输入日期

时间:2018-11-20 17:08:06

标签: excel vba button user-input userform

我对整个VBA / Excel Macros有点陌生,所以我正在尽力找到所需的解决方案,到目前为止,我做得很好-但最终陷入了困境。

我有一个代码,该代码自动过滤我的数据表,然后对特定列进行排序(请参见下文)。

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这样做是最合适的(下图)

img1

我只是不知道如何提示用户窗体出现在代码的那一行中,并通过输入日期,单击Enter,然后继续运行原始的FGReport()宏使其具有功能。

让我知道是否需要更多信息!谢谢!

1 个答案:

答案 0 :(得分:1)

最初,我会建议一个输入框并检查输入是否有效:

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是一个非常脆弱的函数,但是如果您认为合适的话,可以继续使该代码更奇特。