"Właściwym" sposobem odniesienia się do tabeli jest pobranie jej obiektu ListObject z arkusza roboczego, tj. SheetObject.ListObjects(ListObjectName)
.
Jeśli chcesz odwołać się do tabeli bez użycia arkusza, możesz użyć hacka Application.Range(ListObjectName).ListObject
.
UWAGA: Ten Hack opiera się na fakcie, że Excel zawsze tworzy nazwany zakres do stołu DataBodyRange o tej samej nazwie, jak nazwa tabeli. Jednak ta nazwa zakresu może być zmieniona ... ale nie jest to coś, co chcesz zrobić, ponieważ nazwa zostanie zresetowana, jeśli zmienisz nazwę tabeli! Można również uzyskać nazwany zakres bez powiązanego obiektu ListObject.
Biorąc pod uwagę niezbyt pomocny komunikat o błędzie programu Excel 1004, gdy pojawi się nazwa źle, może chcesz stworzyć opakowanie ...
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
również kilka dobrych informacji ListObject here.
Wygląda dobrze, dziękuję za to! –