我对整个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这样做是最合适的(下图)
我只是不知道如何提示用户窗体出现在代码的那一行中,并通过输入日期,单击Enter,然后继续运行原始的FGReport()宏使其具有功能。
让我知道是否需要更多信息!谢谢!
答案 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是一个非常脆弱的函数,但是如果您认为合适的话,可以继续使该代码更奇特。