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

Ein Tabellenblatt ansteuern mit einer DIM Anweisung

Forumthread: Ein Tabellenblatt ansteuern mit einer DIM Anweisung

Ein Tabellenblatt ansteuern mit einer DIM Anweisung
12.09.2025 09:56:12
mckater
Hallo Liebe Excel User,

irgendwie habe ich bei den für mich einfachen Dingen immer mehr Probleme!
Problem ist Code:
Das ist die Letzte Sub in Modul1 und habe das gemacht.

Dim xJahr As Long
xJahr = Sheets("Jahr_der_Auswertung").Range("A1").Value

Sheets(xJahr).Select

Jedoch bekomme ich den Debuggen Fehler....er meckert, weil er das schon vorhandene Tabellenblatt, was in der Range ja steht nicht anerkennt!?
Ich will ja nur von einem aktiven Tabellenblatt auf dieses gehen um den Rest der Auswertung zu machen.
Egal wie ich es mache....
Sheets(xJahr).Select
Sheets("xJahr").Select

Witzig ist, weil ich habe in Modul vorher schon die Dim angewendet und funktioniert.
Aber auch nur, weil ich ein Tabellenblatt kopiert habe und es auf xJahr gestellt habe.

Wie ich also sehe, kann man ein bestehendes Tabellenblatt wie in meinem Fall "2025" mit xJahr nicht ansprechen?
Eine Lösung wäre natürlich ich habe ein Tabellenblatt, kopiere es und ändere es mit xJahr um, das funktioniert, aber das ist doch komisch oder?

Mir tut es ja fast schon Leid, dass ich immer mit so einfachen Dingen hier um Hilfe suche.

LG mckater
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ein Tabellenblatt ansteuern mit einer DIM Anweisung
12.09.2025 10:08:36
velo
Hi,

du darfst xJahr nicht als Long, sondern musst es als String deklarieren
Dim xJahr as String

VG
AW: Ein Tabellenblatt ansteuern mit einer DIM Anweisung
12.09.2025 10:44:57
mckater
Vielen Dank an velo und GerdL,

@ GerdL
Das funktioniert!!!!!
Ich hab von Long auf String umgestellt und geht super!

Warum weiß ich nicht!....weil ich kann es nur vermuten, dass die Tabellenblätter mit String angepingt werden wollen?
Für mich sind LONG Zahlen, Zahlen in einen gewissen Bereich, sehr hoch!, wie in meinem Fall und mit String, ist doch Text oder?
Aber mit String funktioniert das und muss vermuten, dass Excel die Tabellenblätter mit String haben will, die angesprochen werden!?

Somit muss ja ein Tabellenblatt mit 2025 ein String sein und keine Zahlen?
Ich muss davon ausgehen, alle Tabellenblätter spricht man also mit String an?
Jedenfalls hab ich das so gemacht und der Bub von Excel hat sofort die 2025 gewählt, was ja dann wichtig ist!
DANKE!!!!

@ velo
bei deinem Code bockte er gleich....ich vermute, denke oder weiß es nicht, das dahinter eine Function steckt und man muss diese implementieren in Excel in einer Klasse.
Aber weil ich mich da nicht auskenne, weiß ich das ja nicht.

Aber Dir auch Danke! Problem ist gelöst.

LG an das Herber User Team von Usern, die sich auskennen, wenn es Probleme gibt, mckater
Anzeige
AW: Ein Tabellenblatt ansteuern mit einer DIM Anweisung
12.09.2025 10:51:17
mckater
Es tut mir Leid, habe die Lösungen vertauscht!

@ velo
Deine Mail und Post führte zu Erfolg, sorry, das ich das verwechselt habe

LG mckater
AW: Ein Tabellenblatt ansteuern mit einer DIM Anweisung
12.09.2025 12:04:20
velo
Gerd hat hier aus versehen eine Klammer weggelassen:

Sheets(Cstr(xJahr).Select
wird zu
Sheets(CStr(xJahr)).Select
Mit der zusätzlichen Klammer dürfte seine Lösung auch klappen.

Gerds Lösung ist mMn dann vor allem besser, wenn du mit dem Jahr noch irgendwelche Berechnungen machen willst, dann kann der Datentyp Long (also eine Zahl) bleiben und es ist robuster damit zu rechnen. (Man kann auch mit Strings rechnen, wenn diese nur aus Zahlen bestehen, ist jedoch meiner Ansicht nach nicht gerade Best Practise)

VG
Anzeige
AW: Ein Tabellenblatt ansteuern mit einer DIM Anweisung
12.09.2025 11:50:42
daniel
Ich hab von Long auf String umgestellt und geht super! Warum weiß ich nicht!

das ist einfach:
es gibt zwei Wege, mit Sheets(???) ein Tabellenblatt zu referenzieren:
a) über den Namen
b) über die Blattnummer
Name ist das, was auf dem Reiter steht.
Blattnummer ist die Positionsnummer des Blattes, bezogen auf die Reihenfolge der Reiter von links


wenn du also Sheets() mit einer Zahl "fütterst", dann wird es das Sheet über diese Zahl als Positionsnummer suchen, verwendest du einen Text, dann wird es nach dem Namen suchen.
Sheets(1) wäre also das erste Tabellenblatt von links
Sheet("1") wäre das Tabellenblatt mit dem Namen "1".
verwendet man eine Variable, ist der Typ der Variable entscheidend (String oder Integer, Long, ...), was VBA dann annimmt.

Gruß Daniel

Anzeige
AW: Ein Tabellenblatt ansteuern mit einer DIM Anweisung
12.09.2025 16:42:15
mckater
Hallo Daniel,

Danke für die ausführlichen, neue Infos zu Excel und den Tabellenblättern.

@ Daniel,

man lernt nie aus in Excel oder im Leben!
Da die Position nicht immer die Gleiche ist, ist es schwierig und nur wieder mit VBA zu lösen sein.
Natürlich hat Excel das geschmeckt mit VBA den "2025" zu selecten.
Alles gut und schön, aber ich wollte ja, dass ich den Dim schreibe und er es erkennt, weil ich ja Rohdaten habe....wo ich dann eine Inputbox habe, dann gebe ich die Jahreszahl ein und speichert es ab.
Dann läuft der Code super runter.....
So wie ich sehe ist STRING die richtige Wahl, weil Excel ist es egal wo das Tabellenblatt sich befindet....der sucht und aktiviert es und macht weiter mit dem Code.
Für mich als fast Anfänger in VBA habe ich es einfach nicht verstanden, weil ich ein Tabellenblatt als 2025 sehe wie eine Zahl, aber eben nicht so, der mag es mit String.
Somit ist für mich klar, alle Tabellenblätter wollen mit STRING deklariert werden und das hat mir velo bzw. Gerds vermittelt.

Ich weiß echt nicht, was ich machen sollte OHNE EURE Hilfe....Stück für Stück ans Ziel zu kommen.

Muss lachen, weil früher kam mein Chef zu mir und sagte, kannst das machen?
Ich habe gesagt, das ist nicht mein Job und das kann ich nur privat machen.
Aber mit der Hilfe mit den Herber Usern habe ich einen Prüfbericht erstellt, Rohdaten und drücke drauf und alles wird druckfertig ausgedruckt...mit schwarz oder rot, sollte der Wert außerhalb der Toleranz sein.
Also hatte ich viel Arbeit, eine Vorlage, wie ISO9001 usw, mit Englisch und Deutsch hab ich die Vorlagen erstellt.
Das Ding funktioniert super! Aber auch nur mit Hilfe von den Usern hier aus Herber!
Der Code muss so viel machen, muss so viel tun und macht alles so toll.....braucht eh nur 20sec oder so!
Den Code dürfte man nicht ansehen, weil Profis denken, mein Gott, das kannst doch kürzer machen*gg*
Egal, wichtig ist doch, es funktioniert.

Danke!

LG mckater
Anzeige
AW: Ein Tabellenblatt ansteuern mit einer DIM Anweisung
14.09.2025 12:25:56
ralf_b
Für mich als fast Anfänger in VBA habe ich es einfach nicht verstanden, weil ich ein Tabellenblatt als 2025 sehe wie eine Zahl, aber eben nicht so, der mag es mit String.

Eigentlich sollte dir schon die Bezeichnung "Name" sagen das ein Text ist. Also String.
Auch wenn der Name wie eine Zahl ist aussieht "2025", dann ist das immer noch ein Text. Aber diese Text-Zahlen kann man dann auch in Werte umwandeln mit den entsprechenden Funktionen. Nur falls du sie zum Berechnen benötigst.
Anzeige
AW: Ein Tabellenblatt ansteuern mit einer DIM Anweisung
15.09.2025 11:16:30
mckater
@ralf_b,

Excel ist halt sehr vielseitig und komplex, weil keiner braucht alles, was es zu bieten hat.
Wie ich die Antworten so gelesen habe auf meine Frage, sollte mir ja bewusst gewesen sein, dass alles in den zweifachen Anführungszeichen, auch Gänsefüßchen genannt immer TEXT ist für Excel und natürlich auch im VBA Code.

Komisch war halt folgendes!

Vorher hatte ich eine DIM Anweisung:
Dim xJahr As Long
xJahr = Sheets("JAHR_eingeben").Range("A1").Value

Code läuft dann etwas weiter runter bis auf:
Sheets("Rohdaten").Select
Sheets("Rohdaten").Name = xJahr
Sheets.Add After:=ActiveSheet
ActiveSheet.Name = "Rohdaten"

Da hat er nicht gemeckert, obwohl die Dim Anweisung mit Long war!
(Vermute mal, bei einem kopieren eines Tabellenblattes und der Umbenennung, nimmt Excel das selber in die Hand, auch wenn da in der DIM Long steht?)

Dann kommt der nächste Ablauf, der darauffolgenden Sub, die mit Goto weitergeleitet wird.
Hab da wieder die Dim eingegeben:
Dim xJahr As Long
xJahr = Sheets("JAHR_eingeben").Range("A1").Value

Sheets(xJahr).Select (Hier meckert er schon mit Debuggen!

Jedenfalls, wenn alles auf String ist, geht alles reibungslos via Excel Like Style runter wie geschmiert.
Fazit, alles was Tabellenblätter betrifft ist String und nicht Long...mit Hilfe durch die Excel Power User!

LG mckater
Anzeige
AW: Ein Tabellenblatt ansteuern mit einer DIM Anweisung
15.09.2025 11:42:32
daniel
Hi
der Name eines Sheets ist immer ein Text.
wenn du jetzt das Sheet benenntst (.Name = ...) ist klar, dass der Name gemeint ist und daher kann Excel eine Zahl in den entsprechenden Text wandeln, weil es aus der Situation heraus Text sein muss.

anders sieht es aus, wenn du versuchst, das Sheet "anzusprechen". Das kann man nämlich auf zwei Wegen tun, entweder über den Namen (Text) oder über die Indexnummer (Zahl). Daher ist es an dieser Stelle nicht mehr eindeutig und Excel richtet sich nach dem, was du verwendest. Dh. gibst du eine Zahl an, dann nimmt es diese als Indexnummer, gibst du einen Text an, dann sucht es diesen als Namen.

Gruß Daniel
Anzeige
AW: Ein Tabellenblatt ansteuern mit einer DIM Anweisung
15.09.2025 12:43:46
mckater
@Daniel,

ich jetzt voll und ganz bei Dir, weil so ist es einfach!
Darum ist das Beste ein Tabellenblatt mit String anzusprechen!
Es ist natürlich auch super, ein Tabellenblatt mit der Positionierung anzusprechen, aber was tun, wenn ein User ein Tabellenblatt hinzufügt....der Horror für den VBA Code.
Also die Positionierung via.......Selection.Offset(1, 7).Select
Bringt schon was, wenn es immer gleich ist....aber mit der DIM Anweisung auf String zu gehen macht das Problem weg.
Weil egal was der User da für Tabellenblätter rein tut, ob hinten oder vorne....Excel findet den Namen mit String und macht seine Arbeit.
Die Positionierung mit dem Offset, macht nur Sinn, wenn der User keinen Zugriff hat, auf den VBA Code oder wenn er ein neues Tabellenblatt einfügt, bekommt er eine 10 sec Strafe wie in der Formel1*gg*
Aber weil Excel ja so vielfältig ist, kann man ja in einer Exceldatei alles machen....Tabellenblätter müssen natürlich dazu kommen....aber der Excel User da nur gewisse Bereiche hat mit den Eingaben.

Bei mir läuft das ganze so ab:
In Modul1 sind einige Sub's, die mit Goto weitergeleitet werden
Modul1: Sub1 ist eine Inputbox...die fragt mich was, welches Jahr....ich gebe es ein.
er sagt, super gespeichert in A1 im Tabellenblatt (sollte halt vorher schon 2025 als Tabellenblatt vorhanden sein, löschen, weil er macht es eh NEU)
Modul1: Sub 2 fängt dann an mir unwichtige Zeilen zu löschen, weil die brauchen wir später nicht
Modul1: Sub3 macht dann kosmetik, bereitet die Zahlen auf, ohne die komischen Zeichen, welche wir nicht brauchen...also ein "Text in Spalten" Makro

Ja und so geht es weiter bist zur vollständigen Auswertung und das in 5sec oder weniger

P.S PQ ist eine tolle Sache, habe das auch schon gemacht.....jedenfalls ist die Datenbank der Dateien immer Datei 2 und das ist ein Problem....
da waren alle Daten, aber oftmals nicht vollständig!!!
Darum mach ich das lieber mit dem kopieren in die Rohdaten manuell....das läuft super und mit PQ...Power Query stimmen die Zahlen nicht so wie manuell.


LG mckater
Anzeige
AW: Ein Tabellenblatt ansteuern mit einer DIM Anweisung
12.09.2025 10:10:31
GerdL
Moin

Versuche
Sheets(Cstr(xJahr).Select

Gruss Gerd
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18