Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1868to1872
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ListObjects - Tabellenname ändern

ListObjects - Tabellenname ändern
01.02.2022 12:01:36
C
Hallo zusammen,
ich bin neu hier im Forum und habe mich angemeldet, da ich mit einem Problem nicht wirklich weiter komme. Ich bin keinVBA Profi sondern habe mir bis jetzt alles immer eher im Internet oder dank des Makro-Recorders zusammen kopiert. Hier konnte ich aber keine wirkliche Lösung finden.
Und zwar habe ich folgendes Problem:
Ich habe ein Worksheet auf dem ganz viele (intelligente) Tabellen/ ListObj. mit Header vorhanden sind (siehe Beispieldatei
https://www.herber.de/bbs/user/150806.xlsx ). Da ich diese Tabellen als Datenüberprüfung für zwei dynamische Dropdown-Felder auf einem anderen Worksheet brauche, ist es wichtig, dass der Tabellenname und der Header jeweils gleich sind.
Da sich die Header manchmal ändern, möchte ich ich jetzt ein Makro schreiben, das das dann auf Befehl überprüft (Header und Name einer Tabelle stimmen nicht mehr überein) und ideealerweise sogar direkt den Namen anpasst (falls der Name schon verhanden ist oder der Headername nicht im richtigen Format ist, soll eine Fehlermeldung kommen, die am allerliebsten sogar gleich sagt, der Header welcher Tabelle das Problem ist).
Also bei der Beispieldatei wäre die dritte Tabelle z.B. ein Kandidat, der angepasst werden müsste: Hier ist der Header in C2 "Projektname_neu", die Tabelle heißt aber "Projektname_alt".
Vielen, vielen Dank an alle, die mir hier weiterhelfen können

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ListObjects - Tabellenname ändern
01.02.2022 12:14:37
Rudi
Hallo,

Sub aaa()
Dim lo As ListObject
For Each lo In ActiveSheet.ListObjects
lo.Name = lo.HeaderRowRange(1)
Next
End Sub
Gruß
Rudi
AW: ListObjects - Tabellenname ändern
01.02.2022 14:28:28
C
Hallo Rudi,
vielen, vielen Dank für die schnelle Hilfe. Ich hatte vor allem das Problem, dass ich nicht wusste wich ich den Header anspreche aber das ging ja jetzt ganz einfach :) Sehr, sehr cool - danke!
Was jetzt noch fehlt ist das Fehler-Handling, da es zwei Fehler gibt, die hier sehr häufig passieren können
a) Der Name im Header hat Leerzeichen und es geht dadurch nicht -> Dann müssen die Leerzeichen durch "_" ersetzt werden
b) Den Tabellennamen gibt es schon (das kann sehr häufig passieren, da die Tabellen auch mal hin und her geschoben werden) (MEine Lösungsidee: Ich mache einen ersten Durchlauf, und falls es eine Fehlermeldung gibt, da es den Namen der Tabelle schon gibt, soll ein "Hilfsname" vergeben werden. Im Anschluss lasse ich die Schleife einfach nochmal durchlaufen)
Ich habe mal einen ersten Versuch gestartet. Könntest Du vielleicht mal drüber schauen und mir sagen wie ich das noch besser hinbekomme. Sicher gibt es hier noch Syntaxfehler oder ähnliches - wie gesagt bin hier echt VBA Anfänger. Vielen, vielen Dank!!

Sub aaa()
Dim lo As ListObject
For Each lo In ActiveSheet.ListObjects
On Error GoTo nameschonvergeben
lo.HeaderRowRange(1).Value = Replace(lo.HeaderRowRange(1).Value," ","_")  'Hier versuche ich die Leerzeichen aus dem Header zu entfernen (falls es hier überhaupt welche gibt)
lo.Name = lo.HeaderRowRange(1)
Next
For Each lo In ActiveSheet.ListObjects
On Error GoTo ausnahme
lo.Name = lo.HeaderRowRange(1)
Next
nameschonvergeben: lo.Name = lo.HeaderRowRange(1)&"_1"
Resume Next
End Sub

Anzeige
AW: ListObjects - Tabellenname ändern
01.02.2022 14:29:14
C
Hallo Rudi,
vielen, vielen Dank für die schnelle Hilfe. Ich hatte vor allem das Problem, dass ich nicht wusste wich ich den Header anspreche aber das ging ja jetzt ganz einfach :) Sehr, sehr cool - danke!
Was jetzt noch fehlt ist das Fehler-Handling, da es zwei Fehler gibt, die hier sehr häufig passieren können
a) Der Name im Header hat Leerzeichen und es geht dadurch nicht -> Dann müssen die Leerzeichen durch "_" ersetzt werden
b) Den Tabellennamen gibt es schon (das kann sehr häufig passieren, da die Tabellen auch mal hin und her geschoben werden) (MEine Lösungsidee: Ich mache einen ersten Durchlauf, und falls es eine Fehlermeldung gibt, da es den Namen der Tabelle schon gibt, soll ein "Hilfsname" vergeben werden. Im Anschluss lasse ich die Schleife einfach nochmal durchlaufen)
Ich habe mal einen ersten Versuch gestartet. Könntest Du vielleicht mal drüber schauen und mir sagen wie ich das noch besser hinbekomme. Sicher gibt es hier noch Syntaxfehler oder ähnliches - wie gesagt bin hier echt VBA Anfänger. Vielen, vielen Dank!!

Sub aaa()
Dim lo As ListObject
For Each lo In ActiveSheet.ListObjects
On Error GoTo nameschonvergeben
lo.HeaderRowRange(1).Value = Replace(lo.HeaderRowRange(1).Value," ","_")  'Hier versuche ich die Leerzeichen aus dem Header zu entfernen (falls es hier überhaupt welche gibt)
lo.Name = lo.HeaderRowRange(1)
Next
For Each lo In ActiveSheet.ListObjects
On Error GoTo ausnahme
lo.Name = lo.HeaderRowRange(1)
Next
nameschonvergeben: lo.Name = lo.HeaderRowRange(1)&"_1"
Resume Next
End Sub

Anzeige
AW: ListObjects - Tabellenname ändern
01.02.2022 18:11:56
Yal
Hallo C,
Namen von ListObject müssen eindeutig sein, daher kann es keine Doppelung geben. Tabellen (=ListObject) dürfen auch keine Leerzeichen im Namen haben.
Ich habe zuerst versucht zu verstehen, wie Du eine Spalte von einem ListObject als Datenüberprüfung stellen kannst. Es geht mit:
=INDIREKT("TabelleName[SpalteName]")
aber es bedeutet, dass sowohl Tabellenname als auch Spaltenname zu verwenden ist! Daher keine Kollision möglich.
Schwieriger wird es zu prüfen, falls der Name eine Spalte sich geändert hat, welche Datenüberprüfung aktualisiert werden soll. Da muss man über alle "Validations" gehen.
VG
Yal
Anzeige
AW: ListObjects - Tabellenname ändern
03.02.2022 17:13:33
C
Hallo Yal,
vielen Dank für deine Nachricht, aber ich verstehe sie nicht ganz. Die Datenüberprüfung ist gar kein Problem, die läuft mit Dropdown, die nicht die Tabellen direkt anspricht sondern den Bereich (alle Header sind ja in der selben Spalte).
Hast Du mal auf meinen Code-Vorschlag geschaut und könntest mir vielleicht Feedback geben, wo hier die Fehler sind und wie man das optimieren könnte? :) Vielen lieben Dank an alle.
AW: ListObjects - Tabellenname ändern
03.02.2022 19:10:09
Yal
Hallo C,
zwischen was Du denkst und was Du schreibst, gibt es eine potentielle Verzerrung und auch was ich lese und daraus ableite. Es ist wichtig, dass wir sicherstellen, dass wir dasselbe verstehen. Alles was Du nicht sagst, muss ich mir selber denken. Und dass ich falsch lege, ist sehr wahrscheinlich.
Zum Beispiel eine "Prüfung" hat immer 2 Teile, weil immer etwas mit etwas anderes verglichen wird. Ich kann hier nicht identifizieren, welche von beide Teile korrigiert werden muss: die Tabellen- uns Spaltenname, oder die Dropdown?
Was ich selber "nachgedacht" habe:
Diese Dropdown nennen sich "Datenüberprüfung" und sind über "Daten", "Datenüberprüfung". Die einzige Weg den Inhalt einer ListObjekt (verwenden wir lieber ListObject als Tabelle. nicht schön aber eindeutiger) in einer Datenüberprüfung einzubinden, ist über INDIREKT("ListObjectName[Spaltenname]")
Wenn Du sagst, das ist klar und hier gibt es keine Problem, fein.
Was ich nicht verstehe:
Du sagst "Die Datenüberprüfung ist gar kein Problem, die läuft mit Dropdown, die nicht die Tabellen direkt anspricht sondern den Bereich (alle Header sind ja in der selben Spalte)."
Wie funktioniert das? Es ist in deiner nichts darüber zu finden.
Die andere Seite sind die ListObject selbst. Diese müssen innerhalb eines Arbeitsmappe eine eindeutige Name haben. Spricht, wenn man ein Blatt innerhalb einer Mappe kopiert, werden die Listobject kopiert, die Duplikate haben aber andere Namen.
Nun ist die Frage, wie kommt es dazu, dass sonst eine Listobject eine neue Name bekommen soll?
Wenn dann, muss der Name geöndert werden? Was passiert, wenn diese Name nicht erlaubt ist, weil schon vorhanden?
ListObject-Namen dürfen keine Leerzeichen haben. Aber warum sollten diese Spaltennamen keine Leerzeichen haben?
Die richtige Antwort bekommt man mit der richtige Frage. Es ist Aufgabe der Fragenden, die Frage so zu formulieren, dass diese Frage eindeutig verstanden wird. Aber kein Stress, es ist mir bekannt, dass schon das viele Erfahrung verlangt :-) Wir gehen schrittweise voran.
VG
Yal
Anzeige

25 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige