如果不存在工作表,则可以忽略VBA



我一直在尝试寻找Excel的VBA代码的广泛研究,但是我敢肯定,这里的某人比我有答案更聪明!

我有一个非常长的代码,该代码正在为我公司中的某人自动化一个发票过程,并引用了6个不同的详细信息选项卡。有时,这些标签中的3个不存在,因为这些客户本周没有发动发票。

我想知道是否有一个代码会忽略这些工作表,如果它们不存在,我可以将其放置在代码的开头并将其应用于每次提及该名称时,而不是必须添加在我的4页代码中每次提及SheepName之前的代码。

您可以通过尝试引用该工作表是否首先存在:

Sub Test()
    If WorkSheetExists("Sheet1") Then
        'do stuff
    End If
End Sub
Public Function WorkSheetExists(SheetName As String, Optional WrkBk As Workbook) As Boolean
    Dim wrkSht As Worksheet
    If WrkBk Is Nothing Then
        Set WrkBk = ThisWorkbook
    End If
    On Error Resume Next
        Set wrkSht = WrkBk.Worksheets(SheetName)
        WorkSheetExists = (Err.Number = 0)
        Set wrkSht = Nothing
    On Error GoTo 0
End Function  

考虑到@brandon发布的内容:

Sub Test()
    Dim wrkSht As Worksheet
    If WorkSheetExists("Sheet2") Then
        Set wrkSht = ThisWorkbook.Worksheets("Sheet2")
    End If
    If Not wrkSht Is Nothing Then
        'Do Stuff
    End If
End Sub

最好的方法是以这样的方式构建代码,使您可以正确且轻松地检查对象的存在,然后根据适当的方式处理逻辑。考虑以下内容:

Sub Foo()
    If Not Bar Is Nothing Then
        Baz(Bar)
    End If
End Sub

这是我最常见的方法(当然是简化的(,我在其中检查以确保对象的反面是什么,如果这样,它使用该对象。

如果您无法采用这种方法,那么更加乏味的方法当然是将每个参考都包含在If块中。虽然乏味,但比使用On Error Resume NextOn Error GoTo 0更好。记住报价"慢速",这在编写代码时要记住很重要。现在,随着您的项目变得更加复杂,现在可以快速修复将不可避免地花费数小时的调试。最好不要过早养成坏习惯。

相关内容

  • 没有找到相关文章

最新更新