Codenamen statt Blattnamen in VBA verwenden
Ein kleines Restaurant hat ständig fünf Aushilfskräfte auf der (derzeit) 450 Euro-Basis. Jede Kraft hat eine eigene Seite, sprich eine separate Registerkarte. Monatlich wird die ausgefüllte Mappe im Format JJJJ-MM-MMMM gespeichert. So weit kein Problem, auch nicht für die Adressierung jeder einzelnen Tabelle mit VBA. Sie werden entweder den im Register stehenden Namen verwenden oder mit einem Index arbeiten.
Das Problem stellt sich vielleicht dann ein, wenn jemand vom Personal wechselt. Und wenn dann die Blätter wegen des Ordnungsprinzips alphabetisch angeordnet werden, dann heißt es fast immer, den Code anzupassen. Es sei denn …
… Sie schreiben den Code nicht auf die herkömmliche Weise sondern verwenden für die Adressierung der Tabellenblätter den VBA-Codenamen. – Gewiss bedarf das einer Erklärung, denn diese Codenamen sind nicht unbedingt ein Standard-Werkzeug des Gelegenheits-Entwicklers.
Angenommen, Sie befinden sich in der Übersicht (sprich es ist das aktibe Blatt mit dem Code drinnen) und wollen aus dem Blatt Cindy den Inhalt der Zelle A1 in eine Variable schreiben. Das würde dann beispielsweise so aussehen (zwei Alternativen):
Option Explicit Sub Zelle_A1() Dim ZellInhalt As Variant ZellInhalt = Sheets("Cindy").Cells(1, 1) 'Oder ZellInhalt = Sheets(4).Cells(1, 1) End Sub
Wenn Sie diesen Code exakt so in der angehängten (ungeänderten) Mappe ausführen lassen, kommt es zu einer Fehlermeldung. Dennoch garantiere ich Ihnen, dass der Code korrekt ist. Wie so oft im Leben „liegt der Teufel im Detail”. Der Blattname von Cindy ist mit einem fehlerhaften Namen versehen. Ändern Sie das Register auf die korrekte Schreibweise und alles läuft wie erwartet. Als „Beleg” hier einfach ein Screenshot des Original-Zustandes:
Nun verlässt Cindy den Betrieb und Fanny beginnt ihren Dienst. Das bedeutet, dass wegen der alphabetischen Anordnung der Hilfskräfte entweder Cindys Blatt verschoben und umbenannt wird oder das alte Blatt wird gelöscht und an der korrekten Position das neue Register erstellt. Das hat aber zur Folge, dass weder Sheets(4) noch Sheets(„Cindy”) zielführend sind. Der Code müsste so oder so angepasst werden.
Das lässt sich ganz prima umgehen, wenn Sie beim coden von vornherein die Arbeitsblätter anders ansprechen. Im linken Viertel des Editor-Fensters sehen Sie normalerweise ständig diese beiden Objekte:
Im oberen Teil erkennen Sie die Eigenschaften des Projekts an sich im Projekt-Explorer. Sollte dieser nicht eingeblendet sein, dann machen Sie es mit StrgR wieder sichtbar. Unter anderem ist dort auch schon der Name des Tabellenblattes korrigiert. Im unteren Bereich dieser Region werden die Eigenschaften der aktiven Tabelle im Eigenschaftsfenster, welches Sie mit F4 sichtbar machen können, dargestellt und sie können dort auch editiert werden. Gleich werden Sie das auch vollziehen.
Im Projekt-Explorer (oben) werden u.a. alle Arbeitsblätter aufgelistet und das Tabellenblatt Cindy ist markiert, leicht blau hinterlegt. In dieser Zeile erkennen Sie den Eintrag: Tabelle4 (Cindy). Cindy ist der Name, welcher auch im Register geschrieben ist. Dieser wird automatisch angepasst, wenn das Blatt umbenannt wird. Der erste Teil, hier: Tabelle4 wird von VBA automatisch vergeben und stellt den Codenamen des Blattes dar. Diese Bezeichnung ändert sich nicht, wenn im Bereich des Workbooks Änderungen vorgenommen werden. Also egal, ob ein Register einen neuen Namen bekommt oder das Blatt an eine andere Stelle verschoben wird, diese Bezeichnung bleibt. Damit eignet sie sich hervorragend als Bezeichner für ein Arbeitsblatt. Der oben aufgeführte Code würde sich in der relevanten Zeile so darstellen:
ZellInhalt = Tabelle4.Cells(1, 1)
Der Objektname der Tabelle, hier Tabelle4 wird ohne Anführungszeichen eingegeben und wie bei Objekten üblich mit einem Punkt vom restlichen Teil des Codes dieser Zeile abgetrennt. So könnten Sie also alle bisherigen Probleme umgehen.
Sollten Sie den Objektnamen ändern wollen, dann geht das nur im unteren Eigenschaftsfenster. In der ersten Ziele mit der Bezeichnung (Name) steht der Codename des Blattes. Hier können Sie fast beliebige Änderungen vornehmen. Allerdings werden Sie das bei Bedarf im Code auch anpassen müssen. Beim Namen gibt es zu beachten, dass Leerzeichen nicht erlaubt sind, Umlaute sind möglich aber nicht wünschenswert. Zahlen sind auch OK, solange sie nicht an erster Stelle stehen. Und das Minuszeichen (Bindestrich) geht auch nicht, als Trenner ist aber ein Unterstreichungsstrich möglich.
Hinweis: Natürlich bleibt es Ihnen unbelassen, auch den Codenamen in den Eigenschaften des Projekts Ihren Wünschen entsprechend aber regelkonform anzupassen. Fehlerhafte Namen werden nicht angenommen, Umlaute sollten Sie nicht verwenden.
[NachObenLetzte Verweis=„T&T|Coding: Codename statt Tabname”]