2016-04-14 12 views
2

VBA Excel 2007 kullanarak bir tablo olup olmadığını belirlemeye çalışıyorum ve varsa silin.Adlandırılmış tablolar var mı kontrol edin VBA Excel 2007

Bir dizi tablo adıyla döngü yapıyorum.

Benim kod aşağıda:

' 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 

Kodum sürece bu tablolar benim çalışma var gibi çalışır. Ayrıca hat

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

çizgiyi

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

değiştirilmesi denedi ancak hala çalışmıyor.

Bunu işe almak için bir yol bilen var mı?

Herhangi bir yardım için teşekkür ederiz. nhee doğru yaklaşımdır anlaşılacağı gibi, bir tablo

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

Hangi hatayı alıyorum:

yukarıda UDF öneri olurdu gibi çabuk ile

? 'Kirli' hızlı düzeltme, '.... Sil 'satırından önce' Hata Özgeçmişinde Yanında 'eklemek olacaktır. – nhee

+0

Çalışma zamanı hatası '9' alıyorum: Abonelik aralık dışı –

+1

Excel, bir hatayla karşılaşması durumunda kod yürütmeyi kesintiye uğratmaz. Bu 'kirli' çünkü tüm hatalar bir sebepten dolayı ortaya çıkar (sizin durumunuzda: makro, var olmayan bir şeyi silmeye çalışıyor) ve bunun üstünden atlayarak diğer hataları gözden kaçırmış olabilirsiniz. – nhee

cevap

2

aşağıdaki UDF boolean döndürür.

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