Die "richtige" Möglichkeit, eine Tabelle zu referenzieren, besteht darin, ihr ListObject aus ihrem Worksheet zu beziehen, d. H. SheetObject.ListObjects(ListObjectName)
.Wenn Sie eine Tabelle referenzieren möchten, ohne das Blatt zu verwenden, können Sie einen Hack Application.Range(ListObjectName).ListObject
verwenden.
HINWEIS: Dieser Hack beruht auf der Tatsache, dass Excel erstellt stets einen benannten Bereich für die DataBodyRange mit dem gleichen Namen der Tabelle als die Tabelle. Allerdings kann dieser Bereichsname geändert werden ... obwohl es nicht etwas ist, was Sie tun möchten, da der Name zurückgesetzt wird, wenn Sie den Tabellennamen bearbeiten! Sie könnten auch einen benannten Bereich ohne zugeordnete ListObject erhalten.
Da Excel nicht-sehr-nützlich 1004 Fehlermeldung, wenn Sie den Namen falsch, möchten Sie vielleicht einen Wrapper erstellen ...
Public Function GetListObject(ByVal ListObjectName As String, Optional ParentWorksheet As Worksheet = Nothing) As Excel.ListObject
On Error Resume Next
If (Not ParentWorksheet Is Nothing) Then
Set GetListObject = ParentWorksheet.ListObjects(ListObjectName)
Else
Set GetListObject = Application.Range(ListObjectName).ListObject
End If
On Error GoTo 0 'Or your error handler
If (Not GetListObject Is Nothing) Then
'Success
ElseIf (Not ParentWorksheet Is Nothing) Then
Call Err.Raise(1004, ThisWorkBook.Name, "ListObject '" & ListObjectName & "' not found on sheet '" & ParentWorksheet.Name & "'!")
Else
Call Err.Raise(1004, ThisWorkBook.Name, "ListObject '" & ListObjectName & "' not found!")
End If
End Function
auch einige gute Listobject Info here.
Sieht gut aus, danke dafür! –