Codename statt Blattname

Codenamen statt Blattnamen in VBA verwenden

Ein kleines Restau­rant hat ständig fünf Aushil­f­skräfte auf der (derzeit) 450 Euro-Basis. Jede Kraft hat eine eigene Seite, sprich eine sep­a­rate Reg­is­terkarte. Monatlich wird die aus­ge­füllte Mappe im For­mat JJJJ-MM-MMMM gespe­ichert. So weit kein Prob­lem, auch nicht für die Adressierung jed­er einzel­nen Tabelle mit VBA. Sie wer­den entwed­er den im Reg­is­ter ste­hen­den Namen ver­wen­den oder mit einem Index arbeit­en.

Das Prob­lem stellt sich vielle­icht dann ein, wenn jemand vom Per­son­al wech­selt. Und wenn dann die Blät­ter wegen des Ord­nung­sprinzips alpha­betisch ange­ord­net wer­den, dann heißt es fast immer, den Code anzu­passen. Es sei denn …

… Sie schreiben den Code nicht auf die herkömm­liche Weise son­dern ver­wen­den für die Adressierung der Tabel­len­blät­ter den VBA-Code­na­men. – Gewiss bedarf das ein­er Erk­lärung, denn diese Code­na­men sind nicht unbe­d­ingt ein Stan­dard-Werkzeug des Gele­gen­heits-Entwick­lers.

Angenom­men, Sie befind­en sich in der Über­sicht (sprich es ist das aktibe Blatt mit dem Code drin­nen) und wollen aus dem Blatt Cindy den Inhalt der Zelle A1 in eine Vari­able schreiben. Das würde dann beispiel­sweise so ausse­hen (zwei Alter­na­tiv­en):

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 ange­hängten (ungeän­derten) Mappe aus­führen lassen, kommt es zu ein­er Fehler­mel­dung. Den­noch garantiere ich Ihnen, dass der Code kor­rekt ist. Wie so oft im Leben „liegt der Teufel im Detail”. Der Blat­tname von Cindy ist mit einem fehler­haften Namen verse­hen. Ändern Sie das Reg­is­ter auf die kor­rek­te Schreib­weise und alles läuft wie erwartet. Als „Beleg” hier ein­fach ein Screen­shot des Orig­i­nal-Zus­tandes:

Tabellenblatt mit fehlerhaftem Namen

Tabel­len­blatt mit fehler­haftem Namen

Nun ver­lässt Cindy den Betrieb und Fan­ny begin­nt ihren Dienst. Das bedeutet, dass wegen der alpha­betis­chen Anord­nung der Hil­f­skräfte entwed­er Cindys Blatt ver­schoben und umbe­nan­nt wird oder das alte Blatt wird gelöscht und an der kor­rek­ten Posi­tion das neue Reg­is­ter erstellt. Das hat aber zur Folge, dass wed­er Sheets(4) noch Sheets(„Cindy”) zielführend sind. Der Code müsste so oder so angepasst wer­den.

Das lässt sich ganz pri­ma umge­hen, wenn Sie beim coden von vorn­here­in die Arbeits­blät­ter anders ansprechen. Im linken Vier­tel des Edi­tor-Fen­sters sehen Sie nor­maler­weise ständig diese bei­den Objek­te:

Eigenschaften des Projekts

Eigen­schaften des Pro­jek­ts

Im oberen Teil erken­nen Sie die Eigen­schaften des Pro­jek­ts an sich im Pro­jekt-Explor­er. Sollte dieser nicht einge­blendet sein, dann machen Sie es mit StrgR wieder sicht­bar. Unter anderem ist dort auch schon der Name des Tabel­len­blattes kor­rigiert. Im unteren Bere­ich dieser Region wer­den die Eigen­schaften der aktiv­en Tabelle im Eigen­schafts­fen­ster, wel­ches Sie mit F4 sicht­bar machen kön­nen, dargestellt und sie kön­nen dort auch edi­tiert wer­den. Gle­ich wer­den Sie das auch vol­lziehen.

Im Pro­jekt-Explor­er (oben) wer­den u.a. alle Arbeits­blät­ter aufge­lis­tet und das Tabellen­blatt Cindy ist markiert, leicht blau hin­ter­legt. In dieser Zeile erken­nen Sie den Ein­trag: Tabelle4 (Cindy). Cindy ist der Name, welch­er auch im Reg­is­ter geschrieben ist. Dieser wird automa­tisch angepasst, wenn das Blatt umbe­nan­nt wird. Der erste Teil, hier: Tabelle4 wird von VBA automa­tisch vergeben und stellt den Code­na­men des Blattes dar. Diese Beze­ich­nung ändert sich nicht, wenn im Bere­ich des Work­books Änderun­gen vorgenom­men wer­den. Also egal, ob ein Reg­is­ter einen neuen Namen bekommt oder das Blatt an eine andere Stelle ver­schoben wird, diese Beze­ich­nung bleibt. Damit eignet sie sich her­vor­ra­gend als Beze­ich­n­er für ein Arbeits­blatt. Der oben aufge­führte Code würde sich in der rel­e­van­ten Zeile so darstellen:

ZellInhalt = Tabelle4.Cells(1, 1)

Der Objek­t­name der Tabelle, hier Tabelle4 wird ohne Anführungsze­ichen eingegeben und wie bei Objek­ten üblich mit einem Punkt vom restlichen Teil des Codes dieser Zeile abge­tren­nt. So kön­nten Sie also alle bish­eri­gen Prob­leme umge­hen.

Soll­ten Sie den Objek­t­na­men ändern wollen, dann geht das nur im unteren Eigenschafts­fen­­ster. In der ersten Ziele mit der Beze­ich­nung (Name) ste­ht der Code­name des Blattes. Hier kön­nen Sie fast beliebige Änderun­gen vornehmen. Allerd­ings wer­den Sie das bei Bedarf im Code auch anpassen müssen. Beim Namen gibt es zu beacht­en, dass Leer­zei­chen nicht erlaubt sind, Umlaute sind möglich aber nicht wün­schenswert. Zahlen sind auch OK, solange sie nicht an erster Stelle ste­hen. Und das Minusze­ichen (Binde­strich) geht auch nicht, als Tren­ner ist aber ein Unter­stre­ichungsstrich möglich.

Hin­weis: Natür­lich bleibt es Ihnen unbe­lassen, auch den Code­na­men in den Eigen­schaften des Pro­jek­ts Ihren Wün­schen entsprechend aber regelkon­form anzu­passen. Fehler­hafte Namen wer­den nicht angenom­men, Umlaute soll­ten Sie nicht ver­wen­den.

[NachOben­Let­zte Verweis=„T&T|Coding: Code­name statt Tab­name”]
Dieser Beitrag wurde unter Coding / Programmieren, Fehlerbehandlung, Mit VBA/Makro abgelegt und mit , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.