检查命名表是否存在VBA Excel 2007

lal*_*_12 3 excel vba excel-vba

我正在尝试使用VBA Excel 2007确定表是否存在,如果存在则删除它.

我循环遍历一系列表名.

我的代码如下:

' Allocate
Dim lIndex                                      As Long

' Allocate table header values in array
Dim sTableNames(1 To Constants.lNumTables)      As String

' Populate array
sTableNames(1) = Constants.sTableNameKpiAllIncidents
sTableNames(2) = Constants.sTableNameSlaAllManualHelpdeskIncidents
sTableNames(3) = Constants.sTableNameSlaAllManualIncidents
sTableNames(4) = Constants.sTableNameKpiAllAutomaticIncidents

' Work in worksheet Statistics
With Worksheets(Constants.sSheetNameStatistics)

    ' Loop through all tables
    For lIndex = 1 To UBound(sTableNames)

        ' Check if table already exists
        If Not .ListObjects(sTableNames(lIndex)) Is Nothing Then

            ' Delete table
            .ListObjects(sTableNames(lIndex)).Delete

        End If

    Next

End With
Run Code Online (Sandbox Code Playgroud)

只要这些表存在于我的工作表中,我的代码就可以正常工作.我也试过更换线

If Not .ListObjects(sTableNames(lIndex)) Is Nothing Then
Run Code Online (Sandbox Code Playgroud)

与线

 If .ListObjects(sTableNames(lIndex)).Count > 0 Then
Run Code Online (Sandbox Code Playgroud)

但它仍然无效.

有人知道让这个工作的方法吗?

任何帮助,将不胜感激.

bre*_*tdj 5

nhee建议的错误处理是正确的方法.

作为UDF,上面的建议会更快:

Function TableExists(ws As Worksheet, tblNam As String) As Boolean
Dim oTbl As ListObject
On Error Resume Next
Set oTbl = ws.ListObjects(tblNam)
TableExists = Not oTbl Is Nothing
End Function
Run Code Online (Sandbox Code Playgroud)