Пользовательский ввод для фильтра даты - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть некоторый код VBA, который применяет фильтр даты к набору данных для дальнейшей работы. В настоящее время фильтр даты применяется на основе предопределенных условий:

Worksheets("PSE Data").Activate

    StartDate = DateSerial(Year(Date), Month(Date), Day(Date))
    EndDate = DateSerial(Year(Date), Month(Date) + 3, Day(Date))


    ActiveSheet.ListObjects("PSE_Data").Range.AutoFilter Field:=17, _
                                            Criteria1:=">=" & StartDate, _
                                            Operator:=xlAnd, _
                                            Criteria2:="<=" & EndDate
    ActiveSheet.ListObjects("PSE_Data").Range.AutoFilter Field:=6, _
                                            Criteria1:="M"

    With ActiveSheet.ListObjects("PSE_Data").Sort
    .SortFields.Add Key:= _
    Range("PSE_Data" & "[Sugg Start Date]"), _
    SortOn:=xlSortOnValues, _
    Order:=xlAscending, _
    DataOption:=xlSortNormal
    .Apply
    End With

Что я хочу сделать, это заменить StartDate и EndDate на значения, введенные пользователем из всплывающего окна. Не могли бы вы помочь?

Ответы [ 3 ]

0 голосов
/ 17 апреля 2020

Вот типичный способ:

Sub dural()
    Dim StartDate As Date, EndDate As Date

    With Application
        StartDate = CDate(.InputBox(Prompt:="enter startdate mm/dd/yyyy", Type:=2))
        EndDate = CDate(.InputBox(Prompt:="enter enddate mm/dd/yyyy", Type:=2))
        MsgBox StartDate & vbCrLf & EndDate
    End With
End Sub
0 голосов
/ 17 апреля 2020

Вот пример, который использует функцию для получения и проверки ввода пользователя. Он использует Application.InputBox, чтобы запросить ввод у пользователя, а затем использует IsDate, чтобы проверить правильность даты.

Option Explicit

Sub test()

'prompt user for start date
Dim StartDate As Variant
StartDate = GetUserInputDate("start")
If StartDate = False Then Exit Sub 'user cancelled
StartDate = CDate(StartDate)

'prompt user for end date
Dim EndDate As Variant
EndDate = GetUserInputDate("end")
If EndDate = False Then Exit Sub 'user cancelled
EndDate = CDate(EndDate)

ActiveSheet.ListObjects("PSE_Data").Range.AutoFilter Field:=17, _
                                            Criteria1:=">=" & StartDate, _
                                            Operator:=xlAnd, _
                                            Criteria2:="<=" & EndDate


End Sub


Function GetUserInputDate(ByVal promptPart As String) As Variant

    Dim temp As Variant

    Do
        temp = Application.InputBox("Enter " & promptPart & " date (ie. mm/dd/yyyy):", "Date?")
    Loop Until (temp = False) Or (IsDate(temp))

    GetUserInputDate = temp

End Function
0 голосов
/ 17 апреля 2020
Dim StartDate, EndDate As Date

StartDate = InputBox("Enter start date: ")
EndDate = InputBox("Enter end date: ")
...