Я пытаюсь найти способ создания и IF-функцию, чтобы определить, возвращают ли фильтры, примененные к таблице в VBA, пустую таблицу. - PullRequest
0 голосов
/ 03 февраля 2020

Я создаю книгу Excel, в которой на первой странице есть панель инструментов. когда из выпадающего списка выбраны две даты и нажата кнопка «refre sh data», запускается макрос, заполняющий все диаграммы и таблицы на странице панели мониторинга на основе таблиц данных в других рабочих листах рабочей книги.

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

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

код начала:

Sub Macro3()

Dim DataM As Variant
Dim DataY As Variant
Dim ws1 As Worksheet
Dim DD1 As OLEObject
Dim DD2 As OLEObject
Dim i As Byte

Set ws1 = Worksheets("KPI Dashboard")
Set DD1 = ws1.OLEObjects("DMonth") 'this is the month input
Set DD2 = ws1.OLEObjects("Dyear") 'this is the year input

Set DataM = DD1.Object
Set DataY = DD2.Object

'part 1 is for utilisation
Set ws2 = Worksheets("People Info")
ws2.ListObjects("Utilisation").Range.AutoFilter Field:=2, Criteria1:=DataM.Value
ws2.ListObjects("Utilisation").Range.AutoFilter Field:=1, Criteria1:=DataY.Value

Моя первая попытка состояла в подсчете строк в диапазоне данных, но каждый раз, когда я пытался это сделать, я получал сообщение об ошибке, что ячеек не было. Я знаю, что обычно я добавляю строку кода «при ошибке», но я хочу, чтобы он выделил пользователю, что в таблице отсутствуют данные, а затем go в следующую таблицу и продолжил. Я не знаю каких-либо способов, которыми я мог бы динамически получать сообщения об ошибках в одной функции на одну и ту же ошибку.

Моя вторая попытка состояла в том, чтобы просто подсчитать общие строки таблиц, с помощью msgbox, чтобы сказать, что нет данных, как показано ниже:

If ws2.ListObjects("Utilisation").Range.SpecialCells(xlCellTypeVisible).Rows.Count = 1 Then
    If MsgBox("It Looks like we have no data for Utilisation, please fill it in and run it again. do you want to continue?", vbYesNo) = vbNo Then
        Exit Sub
    End If
    ws2.ListObjects("Utilisation").AutoFilter.ShowAllData
    GoTo S1P2
End If

Но он всегда возвращает количество строк как 1, даже когда я вижу, что в нем четко 5 или 6 строк.

Поэтому последнее, что я попытался, это выбрал область и посмотрел, смогу ли я считать этот выбор более успешным, но снова все равно возвращаю 1, даже на счет

Кто-нибудь может придумать лучший способ попробовать это?

Я также пытался использовать функцию IsEmpty() и несколько других подобных программ, но могу Кажется, не заставить его работать. он либо говорит, что в диапазоне базы данных нет ячеек, потому что они были запрошены, либо говорит, что в диапазоне таблицы есть 1 строка, даже если ее нет.

Любая помощь в том, как это сделать работа или даже другой путь, с которого можно смотреть вниз, было бы очень полезно.

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