Excel VBA - если столбец не имеет установленного значения, тогда завершить приватную подпрограмму - PullRequest
0 голосов
/ 08 мая 2018

У меня проблема с моим макросом.Он будет фильтровать по критерию X в столбце, скопировать все эти данные, затем вставить на новый лист и сохранить.Если X-критерий не существует в столбце, он все равно будет сохранен как новый лист, и лист будет пустым и будет иметь большой размер файла.Как я могу заставить VBA проверить, существует ли критерий X в столбце Y, и если да, продолжить макрос.В противном случае пропустите всю частную подпрограмму.

Это раздел, с которым у меня проблемы.Я думаю, может быть, использование оператора If-Else может сработать, но я не уверен, как правильно это включить ... например, если в столбце 21 есть «X», то продолжить.В противном случае пропустите всю подпрограмму.

Private Sub SaveExternalCopy(ByVal Affiliate As String)

Application.ScreenUpdating = False
Application.DisplayAlerts = False

dt = Format(DateAdd("m", -1, Now), "mm.yyyy")
Dim mhoWb As Workbook
Set mhoWb = Workbooks("All_" & dt & " " & " Macro Enabled")
Dim mhoSheet As Worksheet
Set mhoSheet = Sheets("MHO")
    mhoSheet.Activate
    mhoSheet.UsedRange.AutoFilter field:=21, Criteria1:=Affiliate & " " & "Recon"
With mhoSheet
    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
End With

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Я нашел обходной путь - он не самый красивый и, вероятно, не самый эффективный, но, по крайней мере, работает!

Sub ShowAllData()

On Error Resume Next
Worksheets("My_Health_Online").ShowAllData

End Sub

Private Sub SaveExternalCopy(ByVal Affiliate As String)

Application.ScreenUpdating = False
Application.DisplayAlerts = False

Dim rngFoundCell As Range

dt = Format(DateAdd("m", -1, Now), "mm.yyyy")
Dim mhoWb As Workbook
Set mhoWb = Workbooks("All" & dt & " " & "Macro Enabled")
Dim mhoSheet As Worksheet
Set mhoSheet = Sheets("MHO")
    mhoSheet.Activate
    ShowAllData
    Set rngFoundCell = Sheets("MHO").Range("U2:U100000").Find(What:=Affiliate & " " & "Recon")

If rngFoundCell Is Nothing Then
        Exit Sub
Else

После остального я поставил остаток моего кода, который будет работать нормально. Этот код смотрит на столбец U для значения X. Мне пришлось использовать ShowAllData, так как я запускал этот код 5 раз, это создавало странную ситуацию, когда он не находил никаких значений в столбце U, так как они были скрыты фильтром с первых нескольких раз выполнения кода.

0 голосов
/ 08 мая 2018

Вы можете проверить количество видимых строк после применения фильтра:

mhoSheet.UsedRange.AutoFilter field:=21, Criteria1:=Affiliate & " " & "Recon"
If mhoSheet.UsedRange.rows.SpecialCells(xlCellTypeVisible).rows.count = 1 Then
    '--- none of the rows passed the filter, so just exit
    Exit Sub
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...