2016-04-14 15 views
2

テーブルが存在するかどうかをVBA Excel 2007を使用して確認し、存在する場合は削除します。名前付きテーブルが存在するかどうかを確認する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 

私のコードは限りこれらのテーブルは私のワークシートに存在するように動作します。私はまた、ライン

If .ListObjects(sTableNames(lIndex)).Count > 0 Then 

でライン

If Not .ListObjects(sTableNames(lIndex)) Is Nothing Then 

を交換しようとしたが、それはまだ動作しません。

誰かがこれを動作させる方法を知っていますか?

ご協力いただければ幸いです。 nheeがアプローチであることを示唆しているように、テーブルが

Function TableExists(ws As Worksheet, tblNam As String) As Boolean 
    Dim oTbl As ListObject 
     For Each oTbl In ws.ListObjects 
     If oTbl.Name = tblNam Then 
      TableExists = True 
      Exit Function 
     End If 
     Next oTbl 
     TableExists = False 
    End Function 
+0

? 'dirty'という簡単な修正は、 '.... Delete'行の前に' On Error Resume Next'を追加することです。 – nhee

+0

実行時エラー '9'が表示される:下付き文字が範囲外にある –

+1

エラーが発生した場合にExcelが割り込みコードを実行しないようにします。なぜなら、すべてのエラーが理由で表示されているからです(マクロは存在しないものを削除しようとしています)、ジャンプして他のバグを見落とす可能性があります。 – nhee

答えて

4

エラー処理が存在する場合

2

次UDFは、ブール値を返します。 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 
関連する問題