Запуск автофильтра VBA-макроса с всплывающим окном для ввода даты - PullRequest
0 голосов
/ 20 ноября 2018

Я немного новичок во всей этой макрокоманде 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).Я хотел бы, чтобы он предложил пользователю ввести дату вручную.Я подумал, что сделать это с пользовательской формой было бы наиболее подходящим (рисунок ниже)

img1

Я просто понятия не имею, как заставить пользовательскую форму появляться во времяэту строку кода, и пусть она функционирует, введя дату, нажав Enter, а затем продолжите выполнение оригинального макроса FGReport ().

Дайте мне знать, если требуется дополнительная информация!Спасибо!

1 Ответ

0 голосов
/ 20 ноября 2018

Изначально я бы порекомендовал поле ввода и проверил, что ввод действителен:

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 - довольно нестабильная функция, но вы можете продолжить делать этот код более изящным, еслиВы считаете нужным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...