Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Tabellenblatt direkt ansprechen

Tabellenblatt direkt ansprechen
14.04.2021 02:24:43
Klexy
Moin zusammen.
Gegeben ist eine Datei mit 3 Tabellenblättern: Tabelle1, Tabelle2, Tabelle3
Die Reiter der Tabellenblätter sind umbenannt: AAA, BBB, CCC
Das Blatt Tabelle1(AAA) wurde an die zweite Position geschoben.
Problem: der Klarname (AAA) und die Position (zweites Blatt von links) von Tabelle1 kann variieren und ist deshalb für mich nicht brauchbar.
Wie kann ich das Tabellenblatt Tabelle1 aus einer anderen Datei heraus direkt ansprechen,
ohne den Klarnamen zu kennen und ohne die Position zu kennen?
Sub Blatt_ansprechen()
Dim wbk As Workbook
Set wbk = Workbooks("AAA_BBB_CCC.xlsm")
wbk.Activate
wbk.Sheets(2).Activate  ' funktioniert, ist aber für mich nicht brauchbar
wbk.Worksheets(2).Activate  ' funktioniert, ist aber für mich nicht brauchbar
wbk.Sheets("AAA").Activate  ' funktioniert, ist aber für mich nicht brauchbar
wbk.Worksheets("AAA").Activate  ' funktioniert, ist aber für mich nicht brauchbar
Tabelle1.Activate  ' funktioniert nur bei Aufruf aus dieser Datei, nicht aus einer anderen
wbk.Tabelle1.Activate  ' funktioniert nicht
End Sub

SIehe auch angehängte Beispieldatei, wo das Makro auch hinterlegt ist: https://www.herber.de/bbs/user/145500.xlsm
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblatt direkt ansprechen
14.04.2021 05:26:02
Hajo_Zi
Select, Activate usw. ist in VBA zu 99,8% nicht notwendig.
Der Cursor ist kein Hund der überall rumgeführt werden muss.
Hinweise zu select usw. Hajo-Excel.de
Hinweise zu select usw. Online-Excel.de
Hinweise zu select usw. Online-Excel.de
Der Cursor ist kein Hund, der überall rum geführt werden muss.
Falls Link nicht ausgeführt wird:
1. Link kopieren
2. rechte Maustaste neues Fenter.
3. Umschaltstaste drücken und Klick auf den Link
4. STRG+ Link mit Maus aktivieren
Sheets("AAA").Activate
GrußformelHomepage
Anzeige
@Hajo: Erläuterung des Wesens einer Beispieldatei
14.04.2021 10:20:51
Klexy
DIes ist nur ein stark verkürzter Code, um das Kernproblem herauszukristallisieren.
Ich hatte noch überlegt, ob ich folgenden Satz drunter schreiben soll:
"Dies ist natürlich nur ein vereinfachtes, symbolisches Beispiel, bei dem mit "Activate" schnell, einfach und deutlich die gewünschte Ansprache des Tabellenblatts gezeigt werden soll. Also klärt mich bitte nicht darüber auf, wie böse Select ist. "
Dann hab ich mir gedacht, dass das wohl offensichtlich und damit überflüssig ist.
Hatte mich wohl getäuscht.
Sorry.
Deshalb hier nochmal ausdrücklich:
Dies ist natürlich nur ein vereinfachtes, symbolisches Beispiel, bei dem mit "Activate" schnell, einfach und deutlich die gewünschte Ansprache des Tabellenblatts zeigen soll. Also klärt mich bitte nicht darüber auf, wie böse Select ist.
So, und jetzt schau ich mir die restlichen Antworten an.
Anzeige
AW: Tabellenblatt direkt ansprechen
14.04.2021 07:46:51
ralf_b
wenn du weist was auf dem Blatt steht, kannst du per Schleife über alle Blätter, die entsprechende Information auf dem Blatt abfragen und bei Treffer das Blatt referenzieren und die Schleife verlassen.
danke, aber hilft hier nicht.
14.04.2021 10:23:25
Klexy
Ich weiß gar nichts. Alles variabel. Ich weiß nur, dass es Tabelle1 sein muss.
AW: Tabellenblatt direkt ansprechen
14.04.2021 09:32:10
Herbert_Grom
Hallo,
oder du gibst dem Sheet einen Namen im VBA-Editor (mit F4, s. Bild)!

Servus
Anzeige
danke, aber das hilft mir nicht
14.04.2021 13:03:14
Klexy
Manuell ist keine Option und umbenennen auch nicht.
Und wenn sie umbenannt wäre, hätte ich immer noch das Problem, sie anzusprechen. Nur mit "Tab_DeinName" statt mit "Tabelle1".
Die Datei ist wie sie ist, kann von mir nicht geändert werden und soll in ihrem Blatt "Tabelle1" angesprochen werden.
Anzeige
AW: danke, aber das hilft mir nicht
14.04.2021 15:18:16
Luschi
Hallo Klexy,
bei mir klappt das so:

Sub Machmal()
Dim wbQ As Workbook, wsQ As Worksheet
Set wbQ = Workbooks("145412.xlsx")
For Each wsQ In wbQ.Worksheets
If wsQ.CodeName = "Tabelle1" Then
Exit For
End If
Next wsQ
If Not wsQ Is Nothing Then
MsgBox "Tab-Name  = " & wsQ.Name & vbCrLf & _
"Code-Name = " & wsQ.CodeName
Else
MsgBox "gewünschte Tabelle nicht vorhanden!"
End If
Set wsQ = Nothing
Set wbQ = Nothing
End Sub
Gruß von Luschi
aus klein-Paris
PS: Da man aber auch die 'CodeName-Property ändern kann, ist das also nicht 1005ig wasserdicht!
Anzeige
Danke, perfekt
14.04.2021 15:30:29
Klexy
.CodeName ist mir beim Googeln nicht über den Weg gelaufen.
.CodeName ist (in diesem Fall) safe. Da geht keiner ran.
Sub Blatt_ansprechen3()
Dim wbk As Workbook, Blatt As Worksheet
Set wbk = Workbooks("AAA_BBB_CCC.xlsm")
For Each Blatt In wbk.Worksheets
If Blatt.CodeName = "Tabelle1" Then
Blatt.Activate
Exit For
End If
Next Blatt
Set Blatt = Nothing
Set wbk = Nothing
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Tabellenblatt direkt ansprechen in Excel VBA


Schritt-für-Schritt-Anleitung

Um ein Excel-Tabellenblatt direkt anzusprechen, ohne den Klarnamen oder die Position zu kennen, kannst du den Code in VBA verwenden. Hier ist eine einfache Anleitung:

  1. Öffne den VBA-Editor in Excel (ALT + F11).
  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" -> Einfügen -> Modul).
  3. Kopiere und füge den folgenden Code ein:
Sub Blatt_ansprechen()
    Dim wbk As Workbook
    Dim Blatt As Worksheet
    Set wbk = Workbooks("AAA_BBB_CCC.xlsm") ' Ändere den Namen entsprechend
    For Each Blatt In wbk.Worksheets
        If Blatt.CodeName = "Tabelle1" Then
            Blatt.Activate
            Exit For
        End If
    Next Blatt
    Set Blatt = Nothing
    Set wbk = Nothing
End Sub
  1. Führe das Makro aus, um das gewünschte Tabellenblatt anzusprechen.

Häufige Fehler und Lösungen

  • Fehler: Laufzeitfehler 9: Index außerhalb des gültigen Bereichs

    • Lösung: Stelle sicher, dass die angegebene Arbeitsmappe geöffnet ist und der Name korrekt ist.
  • Fehler: Objektvariable oder With-Blockvariable nicht festgelegt

    • Lösung: Überprüfe, ob das Tabellenblatt existiert und ob der CodeName korrekt ist.

Alternative Methoden

  1. Direktes Ansprechen durch CodeName:

    • Du kannst auch den CodeName direkt ansprechen, ohne eine Schleife zu verwenden:
      Tabelle1.Activate ' Dies funktioniert nur innerhalb der gleichen Arbeitsmappe
  2. Zugriff auf Zellen in einem anderen Tabellenblatt:

    Dim Wert As Variant
    Wert = wbk.Worksheets("Tabelle1").Cells(1, 1).Value ' Zelle A1 von Tabelle1
  3. Verwendung von ThisWorkbook:

    • Wenn dein Code in der Arbeitsmappe läuft, die das Tabellenblatt enthält, kannst du ThisWorkbook verwenden:
      ThisWorkbook.Worksheets("Tabelle1").Activate

Praktische Beispiele

Hier sind zwei praktische Beispiele, die dir helfen, Excel VBA Tabellenblätter effektiv anzusprechen:

  • Beispiel 1: Aktives Tabellenblatt ansprechen

    Sub AktivesBlattAnsprechen()
    Dim ws As Worksheet
    Set ws = ActiveSheet ' Aktuelles Blatt ansprechen
    MsgBox "Aktuelles Blatt: " & ws.Name
    End Sub
  • Beispiel 2: Zelle in anderem Tabellenblatt ansprechen

    Sub ZelleInAnderemBlatt()
    Dim wb As Workbook
    Set wb = Workbooks("AAA_BBB_CCC.xlsm")
    Dim wert As Variant
    wert = wb.Worksheets("Tabelle1").Cells(1, 1).Value ' Zelle A1 ansprechen
    MsgBox "Wert in Tabelle1 A1: " & wert
    End Sub

Tipps für Profis

  • Vermeide Select und Activate: Diese Befehle sind in VBA oft überflüssig. Stattdessen solltest du direkt auf Objekte zugreifen.

  • Nutze den CodeName: Verwende den CodeName des Arbeitsblatts für eine stabilere Referenz. Dieser ändert sich nicht, wenn der Benutzer den Namen des Blattes ändert.

  • Schleifen über mehrere Worksheets: Wenn du mit mehreren Worksheets arbeiten möchtest, verwende For Each Schleifen, um alle Arbeitsblätter zu durchlaufen.


FAQ: Häufige Fragen

1. Frage
Wie kann ich ein anderes Tabellenblatt ansprechen, wenn ich den Namen nicht kenne?
Antwort: Du kannst über eine Schleife alle Tabellenblätter durchlaufen und die CodeName-Eigenschaft nutzen, um das gewünschte Blatt zu finden.

2. Frage
Was ist der Unterschied zwischen Sheets und Worksheets?
Antwort: Sheets umfasst alle Blätter, einschließlich Diagrammblätter, während Worksheets nur Arbeitsblätter umfasst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige