Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Name von intelligenten Tabellen nicht in Names-Collection

Forumthread: Name von intelligenten Tabellen nicht in Names-Collection

Name von intelligenten Tabellen nicht in Names-Collection
23.11.2025 01:14:29
xlKing
Hallo ihr,

in Excel ist der Name von intelligenten Tabellen Arbeitsmappenweit eindeutig. Ich kann also auf Blatt2 nicht den Namen vergeben, der bereits einer anderen intelligenten Tabelle auf Blatt1 zugeordnet ist. Das ist auch im Namensmanager erkennbar. Dort sieht man den Namen, den Typ "Arbeitsmappe" und den Bereich "bezieht sich auf". Im VBA sind diese Namen aber nicht in der Names-Collection enthalten. Weder beim Workbook-Objekt noch im Worksheet-Objekt. Meine erste Frage ist also, wo holt sich der Namensmanager die Informationen her? Bzw. gibt es eine andere Collection dafür?

Ich möchte ganz einfach anhand eines mir bekannten Namens herausfinden, auf welchem Blatt sich die intelligente Tabelle befindet. Leider gibt es in Excel 2019 aber keine Listobjects-Collection im Workbook-Objekt. Diese findet man nur im Worksheet-Objekt. Natürlich könnte ich jetzt über alle Worksheets und darin alle Listobjects iterieren und dann das jeweilige Blatt zurückgeben, wenn ein LO den entsprechenden Namen hat. Ich hatte aber gehofft es gäbe eine einfachere Lösung. Die RefersTo-Eigenschaft im Namensmanager würde sich hier als Alternative zum fehlenden ActiveWorkbook.Listobjects hervorragend eignen. Meine zweite Frage ist nun: Ist das in neueren Excel-Versionen anders?

Gruß Mr. K.

Anzeige
AW: Name von intelligenten Tabellen nicht in Names-Collection
23.11.2025 02:20:25
Onur
Was erwartest du eigentlich?
Selbst wenn es eine Collection über alle Listobjects einer ARBEITSMAPPE gäbe, was hast du davon? Du wüsstest immer noch nicht, auf welchem Blatt der gesuchte Name sich befindet - es sei denn, die Collection wäre zweidimensional und würde zu jedem Listobject auch noch den Blattnamen speichern. Und schon müsstest du doch iterieren....
Was ist an einer Iteration denn NICHT einfach? Selbst eine KI kriegt das hin:

Sub AlleListObjectsAuflisten()

Dim ws As Worksheet
Dim lo As ListObject
' Schleife durch alle Tabellenblätter in der Arbeitsmappe
For Each ws In ThisWorkbook.Worksheets
' Schleife durch alle ListObjects im aktuellen Tabellenblatt
For Each lo In ws.ListObjects
' Beispiel: Den Namen des ListObjects ausgeben
Debug.Print "Tabelle gefunden: " & lo.Name & " in Blatt: " & ws.Name
Next lo
Next ws
End Sub

Anzeige
AW: Name von intelligenten Tabellen nicht in Names-Collection
23.11.2025 12:48:34
Daniel
Ich möchte ganz einfach anhand eines mir bekannten Namens herausfinden, auf welchem Blatt sich die intelligente Tabelle befindet.

Range("Listobjektname").Worksheet

Gruß Daniel
AW: Name von einer intelligenten Tabelle
23.11.2025 15:19:09
GerdL
Moin

und noch:
MsgBox Range("MeinListobjekt").Parent.Name


Gruß Gerd
Anzeige
AW: Name von intelligenten Tabellen nicht in Names-Collection
23.11.2025 13:06:55
Onur
Hast du das denn auch mal getestet?
1) Müsste es schon Range("Listobjektname").Worksheet.Name lauten
2) Würde dann auch nur funktionieren, wenn man sich auch auf diesem Blatt befinden würde. Funktioniert also auf dem Blatt, wo sich das ListObject befindet. Also wozu dann noch suchen, wenn ich weiss, wo es sich befindet ?
Anzeige
AW: Name von intelligenten Tabellen nicht in Names-Collection
23.11.2025 18:11:37
xlKing
Hallo Daniel (und GerdL)

oh man ich bin ja so betriebsblind. Wie war das mit dem Wald und den Bäumen? Natürlich weiß ich, dass man Bereichsnamen auch über Range ansprechen kann. Aber auf diese Idee bin ich gestern irgendwie nicht gekommen. Ist eben doch gut, wenn mal jemand mit drauf schaut. Das entsprechende Blatt benötige ich ja auch nur, um von da aus auf das Listobject zuzugreifen. Mein Code lautet jetzt also

Dim lo As ListObject
Set lo = Range("DEF").Worksheet.ListObjects("DEF")

Perfekt. So wollte ich das haben. Vielen Dank Daniel.

Gruß Mr. K.
Anzeige
AW: Name von intelligenten Tabellen nicht in Names-Collection
23.11.2025 13:18:25
Daniel
Hi Onur

1. Range("Listobjektname").Worksheet liefert dir das Tabellenblatt, auf dem sich das Listobjekt befindet.
Was damit gemacht wird oder welche Eigenschaft ausgelesen werden soll, muss dann der jeweilige Programmierer selber bestimmen.
Vielleicht soll das Blatt ja einer Variablen zugewiesen werden, dann wäre Set XXX = Range("LO-Name").Name auf jeden fall falsch

2. nein, das Tabellenblatt, auf dem sich das Listobjekt befindet muss hier nicht aktiv sein. Es kann auch ein anderes Blatt aktiv sein, lediglich die richtige Mappe muss aktiv sein.

Gruß Daniel
Anzeige
AW: Name von intelligenten Tabellen nicht in Names-Collection
23.11.2025 13:30:11
Onur
Hi Daniel,

Bei mir kommt

Userbild

wenn das Listobject sich NICHT auf dem aktiven Blatt befindet.
Also wieder die Frage: "Hast du das getestet?"

Guckst du hier:
https://www.herber.de/bbs/user/179683.xlsm

Gruß
Onur

Anzeige
AW: Name von intelligenten Tabellen nicht in Names-Collection
23.11.2025 14:03:33
Daniel
Schreibe das Makro in ein allgemeines Modul, nicht in die Tabellenblattspezifischen, dann funktioniert es.
AW: Name von intelligenten Tabellen nicht in Names-Collection
23.11.2025 17:24:44
Onur
Danke dir !
AW: Name von intelligenten Tabellen nicht in Names-Collection
23.11.2025 03:08:29
xlKing
Hallo Onur,

danke für deine Antwort. Eine Iteration kriege ich schon noch ohne KI gebacken. Codemäßig ist das kein Problem. Ich möchte mir aber Rechenzeit ersparen, auch wenn es pro Aufruf nur wenige Millisekunden sind, kann sich das doch schnell kumulieren. Wenn ich also eine Liste mit Namen von intelligenten Tabellen habe, möchte ich bei Auswahl von einem auf das entsprechende Listobject zugreifen und dessen Eigenschaften und Methoden nutzen, ohne erst alle Arbeitsblätter durchgehen zu müssen.

Gruß Mr. K.
Anzeige
AW: Name von intelligenten Tabellen nicht in Names-Collection
23.11.2025 03:18:39
xlKing
Ach ja, das Listobject hat eine Range-Eigenschaft, dieser hat eine Parent-Eigenschaft und schon käme ich auf das Worksheet. Eine Auflistung aller Listobjects im Workbook-Objekt wäre also durchaus die beste Lösung, wenn schon der Name eindeutig ist, sollte sich das auch widerspiegeln.
AW: Name von intelligenten Tabellen nicht in Names-Collection
23.11.2025 03:54:53
xlKing
Hab jetzt eine einigermaßen befriedigende Lösung gefunden. Da wäre die KI garantiert nicht drauf gekommen. Ich erstelle einfach eine Eigene Collection (hier im Modul DieseArbeitsmappe, oder alternativ als Public Variable in einem allgemeinen Modul) dort lade ich beim Öffnen alle bestehenden Listobjects rein.

Nachteil1: Das frisst etwas Arbeitsspeicher, da aber ja nur der Verweis pro Object mit 4 Byte gespeichert wird, ist das nicht viel.
Nachteil2: Neue Listobjects werden erst nach dem erneuten Öffnen erfasst, müssten also zwischendurch per manuellem Codeanstoss hinzugefügt werden. Oder z.B. beim Speichern über das BeforeSave-Ereignis. Kriege ich zwar auch noch hin, ist aber trotzdem nicht schön.

https://www.herber.de/bbs/user/179681.xlsm

Gruß Mr. K.
Anzeige
AW: Name von intelligenten Tabellen nicht in Names-Collection
23.11.2025 04:13:30
Onur
Du brauchst doch nur aus den Blatt- und Listobjektnmen einmalig eine Dictionary bilden und jederzeit ohne Neuberechnung darauf zugreifen. Schliesslich ändern sich ja die Namen NICHT andauernd.
AW: Name von intelligenten Tabellen nicht in Names-Collection
23.11.2025 04:33:50
xlKing
Ja, das wäre auch eine Alternative. Ich hab's jetzt mit Collection gelöst. So oder so, die Nachteile bleiben bestehen. Neue Listobjects werden erst bei irgendeinem Anstoss (z.B. Speichern) erfasst. Damit muss ich vorerst leben.

Erstmal Gute Nacht!
Mr. K.
Anzeige

Forumthreads zu verwandten Themen

Anzeige