Excel in Zelleformel Tabellenblattindex benutzen statt Tabellenblattname?

3 Antworten

Du kannst dir ja ein Array am Anfang des Programms programmieren, das alle Tabellenblätter der Reihe nach durchgeht und dann immer den neuen Namen abspeichert.

Im Array steht dann

tabelle 1 ------------ Personal
tabelle 2 ------------ Umsatz 
tabelle 3------------- Gewinn

Hinterher kannst du dann wieder mit Worksheet(Array[2]).Range("A1") zugreifen auf Tabelle 2, was der Umsatz Tabelle entspricht.

Problem allgemein bei deinem Vorhaben ist, dass wenn jemand in der Excel die Reihenfolge per Drag and Drop vertauscht der Tabellenblätter, dann macht der Code was er will. Tabelle3.Range("A1") wäre dann zum Beispiel Personal, falls Personal dann an dritter Stelle steht.

Das hier: ='Personal'!A1 und das hier Worksheet("Personal").Range("A1") bleibt immer eindeutig.


QQwertz123 
Beitragsersteller
 05.10.2021, 11:49

ich möchte nicht in VBA den Namen weglassen sondern ich würde die Bezeichnung in einer Zelle in einer Formel verwenden. Also statt in Zelle B1 ='Personal'!A1 zu schreiben, möchte ich ='Tabelle3'!A1 schreiben, ohne den Namen im Reiter des Blattes zu ändern.

Elumania  05.10.2021, 11:57
@QQwertz123

Das Problem hast du aber schon verstanden oder?

Wenn du eine neue Excel startest, dann steht da zunächst

Tabelle1, Tabelle2, Tabelle3,

Jetzt schreibst du stattdessen

"Personal", "Umsatz", "Gewinn"

Jetzt kommt der böse Benutzer und verschiebt die Reihenfolge nach

"Gewinn", "Personal", "Umsatz"

Damit wäre auch das vertauscht:

Tabelle3, Tabelle1, Tabelle2

(Du siehst weiterhin nur "Gewinn", "Personal", "Umsatz")

Nun willst du eine neue Excelzelle ansprechen und zwar in deiner Schreibweise.

='Tabelle1'!A1

Das wäre ja eigentlich die erste sichtbare Tabelle. Tatsächlich ist es aber durch die vertauschte Reihenfolge nun Tabelle3, die ja am Anfang steht.

Das macht so keinen Sinn falls das gehen würde.

-------------

Mach doch in jedem Tabellenblatt als Überschrift z.B. "Personal" dann sieht es auch jeder welches Blatt gemeint ist und lass das so auf "Tabelle1".

QQwertz123 
Beitragsersteller
 05.10.2021, 12:07
@Elumania

Wir reden gerade aneinander vorbei. Mir geht es nicht um die Position im Reiter. Und nicht um die =Blatt() Funktion. Denn ja, dort würde sich das verschieben, wenn man die Reihenfolge ändert. Aber in VBA bleibt Personal immer "Tabelle3" mit dem Name "Personal" egal wo sie sich befindet. Und meine frage ist lediglich ob ich auf das "Tabelle3" (quasi die ID) in einer Formel die ich in eine Zelle schreibe zugreifen kann. So wie das in VBA möglich ist. Denn somit kann mir egal sein wie wer das Blatt benennt, denn die ID ändert sich nicht.

Kann Dir zwar bei VBA nicht helfen, sehe aber den Sinn nicht, Tabellenzugriffe mit nicht vorhandenen Tabellennamen erzeugen zu wollen.

Das wird nicht gehen, ohne dass Du zusätzlich programmieren wirst, dass Tabellenname XY, Tabelle Nr. 1 usw. sein soll.

Außer Chaos kann ich mir keinen Sinn darin vorstellen.

Warum dann nicht gleich die Standard-Tabellenbezeichnungen (Tabelle1, Tabelle2 usw.) lassen ?


QQwertz123 
Beitragsersteller
 05.10.2021, 11:56

Der Sinn ist einfach.
In meiner Mappe sind aktuell 20 Tabellenblätter die alle komplett gleich aufgebaut sind.
Die sollen in einem Blatt zusammengeführt werden. Im Reiter steht nicht Tab1, Tab2, Tab3 sondern der Projektname, damit man nicht ewig suchen musst.
Es kommen aber auch neue Tabellenblätter hinzu.
Deshalb will ich einfach eine Formel like =Tabelle1!A1, denn das kann ich beliebig nach untenziehen und mache aus der 1 ne Variable und dann zeih ich das nur nach unten und führe alle Daten zsm.

Das mache ich bis Tabelle50!A1, denn wenn ein neues Blatt angelegt wird, werden die Daten automatisch gezogen. Ich kann aber ein Projektnamen nicht "vorhersehen". Ich müsste bei jedem neuen Projekt selber in den Mappe und die Formel =ProjektXYZ!A1 anlegen.

Habe selbst eine Lösung gefunden. Ich habe eine Funktion geschrieben die das für mich macht.
=SHEETNAME(3) würde hier "Personal" ausgeben. Zudem ist es egal an welcher Position das Blatt "Personal" steht. Ob am Anfang oder am Ende, die 3 ist immer Personal, da es das 3. erstellte Blatt der Mappe ist/war.

Function SHEETNAME(TabIndex)
On Error Resume Next

    Dim TabName(200) As Variant
    
TabName(1) = Tabelle1.Name
TabName(2) = Tabelle2.Name
TabName(3) = Tabelle3.Name
TabName(4) = Tabelle4.Name
TabName(5) = Tabelle5.Name
TabName(6) = Tabelle6.Name
TabName(7) = Tabelle7.Name
TabName(8) = Tabelle8.Name
TabName(9) = Tabelle9.Name
TabName(10) = Tabelle10.Name
TabName(11) = Tabelle11.Name
TabName(12) = Tabelle12.Name
TabName(13) = Tabelle13.Name
TabName(14) = Tabelle14.Name
TabName(15) = Tabelle15.Name
''...bis Beliebig

    If TabIndex > 0 Then
        SHEETNAME = TabName(TabIndex)
    End If
End Function