Excel VBA-如果列没有设置值,则结束私有子列

Excel VBA-如果列没有设置值,则结束私有子列,vba,excel,Vba,Excel,我的宏有问题。它将过滤列中的X条件,复制所有数据,然后粘贴到新工作表并保存。如果列中不存在X条件,它仍将继续另存为新工作表,并且该工作表将为空,并且具有巨大的文件大小。如何让VBA检查Y列中是否存在X条件,如果存在,请继续宏。否则,跳过整个私有子对象 这是我遇到问题的部分。我在想也许使用If-Else语句可能会起作用,但我不确定如何正确地合并它……比如如果第21列有“X”,那么继续。否则,跳过整个潜艇 Private Sub SaveExternalCopy(ByVal Affiliate As

我的宏有问题。它将过滤列中的X条件,复制所有数据,然后粘贴到新工作表并保存。如果列中不存在X条件,它仍将继续另存为新工作表,并且该工作表将为空,并且具有巨大的文件大小。如何让VBA检查Y列中是否存在X条件,如果存在,请继续宏。否则,跳过整个私有子对象

这是我遇到问题的部分。我在想也许使用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

应用过滤器后,可以检查可见行数:

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

我想出了一个解决办法——它不是最漂亮的,也可能不是最有效的,但至少它是有效的

Sub ShowAllData()

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

End Sub
"


除此之外,我将剩下的代码放在正常运行的地方。此代码查看U列中的X值。我不得不使用ShowAllData,因为我运行了5次这段代码,这造成了一种奇怪的情况,在U列中找不到任何值,因为它们在代码运行的最初几次被过滤器隐藏了。

Exit Sub
是您要查找的语句。也请阅读此@SJR感谢您的链接。我一直在试图找到优化我编写代码的方法。我的大部分问题你都会出现,所以非常感谢你的帮助!嗯,这是第一次,但我运行了5次私人潜艇,因为有5个附属机构。此代码将适用于第一个分支机构,因为它没有数据,但当涉及到其他4个分支机构时,它将退出sub,即使它不应该退出sub,因为它们有数据。我尝试过执行rows.count=0,但这不起作用,但我认为如果0行可见,那么这就是解决方案,对吗?我假设将有一个标题行,这就是我指定rows=1的原因。您必须调整此值以适应您的情况。
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