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

Forumthread: Tabellenblatt mit Variable ansprechen

Tabellenblatt mit Variable ansprechen
03.02.2017 12:04:43
L
Hallo zusammen,
ich bin relativ neu in der vba-welt. jetzt versuche ich mich aber trotzdem mal daran.
ich versuche tabellenblätter (insg. 36) über namen innerhalb eines array anzusprechen.

Sub test()
Dim e as Integer
Dim N() as variant
Dim Tabellenblatt as string
For e=1 to 4
N = Array("aa", "bb", "cc", "dd")
Tabellenblatt = N(e)
'und dann sollte prinzipiell erstmal sowas passieren:
Worksheets(Tabellenblatt).Activate
'also quasi das tabellenblatt mit dem namen "aa" angesprochen werden
Next
End Sub


Vielen Dank schonmal im vorraus,
LG
L K
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblatt mit Variable ansprechen
03.02.2017 12:16:35
Daniel
Hi
Beachte: Falls nicht Option Base 1 gesetzt hast, ist bei automatisch erstellten Arrays der erste Index die 0 und nicht die 1
desweitern solltest du Aktionen, die sich über den Schleifenverlauf nicht ändern, möglichst außerhalb der Schleife ausführen.
dim N
dim e as long
N = Array("aa", "bb", "cc", "dd")
for e = 0 to 3
Worksheets(N(e)).Acitvate
Next
wenn du ne Schleife über alle Elemente des Arrays haben willst, kannst du ersten und letzten Index auch per Funktion ermitteln. Dann brauchst du den Code nicht anpassen, wenn du das Array änderst:
dim N
dim e as long
N = Array("aa", "bb", "cc", "dd")
for e = Lbound(N) to UBound(N)
Worksheets(N(e)).Acitvate
Next

oder du verwendest die For Each In-Schleife:
dim N
dim TB
N = Array("aa", "bb", "cc", "dd")
for Each TB in N
Worksheets(TB).Acitvate
Next
Gruß Daniel
Anzeige
AW: Tabellenblatt mit Variable ansprechen
03.02.2017 12:21:19
ransi
HAllo,
Versuch mal so:
Option Explicit

Sub test()
    Dim e As Integer
    Dim N As Variant
    Dim Tabellenblatt As Object
    Set N = Worksheets(Array("aa", "bb", "cc", "dd"))
    For e = 1 To 4
        Set Tabellenblatt = N(e)
        'und dann sollte prinzipiell erstmal sowas passieren:
        Tabellenblatt.Activate
        'also quasi das tabellenblatt mit dem namen "aa" angesprochen werden
    Next
End Sub



ransi
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Tabellenblatt mit Variable ansprechen in Excel VBA


Schritt-für-Schritt-Anleitung

Um ein Tabellenblatt in Excel VBA über eine Variable anzusprechen, kannst Du die folgende Schritt-für-Schritt-Anleitung befolgen:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Neues Modul einfügen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle Einfügen > Modul.

  3. Code einfügen: Füge den folgenden Code in das Modul ein:

    Sub test()
        Dim e As Integer
        Dim N() As Variant
        Dim Tabellenblatt As String
        N = Array("aa", "bb", "cc", "dd")
    
        For e = 0 To UBound(N)
            Tabellenblatt = N(e)
            Worksheets(Tabellenblatt).Activate
        Next e
    End Sub
  4. Code ausführen: Drücke F5, um den Code auszuführen und die Tabellenblätter nacheinander zu aktivieren.


Häufige Fehler und Lösungen

Hier sind einige häufige Fehler, die bei der Verwendung von Variablen für Tabellenblätter in VBA auftreten können, sowie deren Lösungen:

  • Fehler: Index außerhalb des Bereichs
    Ursache: Wenn Du Option Base 0 in deinem Code verwendest, beginne die Schleife bei 0.
    Lösung: Stelle sicher, dass der Index von 0 bis zur oberen Grenze des Arrays läuft:

    For e = 0 To UBound(N)
  • Fehler: Aktivieren des Arbeitsblatts schlägt fehl
    Ursache: Der Name des Tabellenblatts ist falsch.
    Lösung: Überprüfe, ob die Namen im Array korrekt sind und mit den tatsächlichen Namen der Tabellenblätter übereinstimmen.


Alternative Methoden

Es gibt verschiedene Ansätze, um ein Arbeitsblatt in Excel VBA über eine Variable anzusprechen:

  1. For Each Schleife: Diese Methode ist besonders nützlich, wenn Du alle Arbeitsblätter in einer Sammlung durchlaufen möchtest:

    Dim TB As Variant
    For Each TB In Array("aa", "bb", "cc", "dd")
        Worksheets(TB).Activate
    Next TB
  2. Direkte Referenzierung: Du kannst auch das aktive Tabellenblatt als Variable speichern:

    Dim aktivesBlatt As Worksheet
    Set aktivesBlatt = ActiveSheet
    aktivesBlatt.Activate

Praktische Beispiele

Hier sind einige praktische Beispiele, um zu zeigen, wie Du Tabellenblätter über Variablen ansprechen kannst:

  • Aktives Tabellenblatt als Variable:

    Dim aktivesBlatt As Worksheet
    Set aktivesBlatt = ActiveSheet
    MsgBox "Das aktive Tabellenblatt ist: " & aktivesBlatt.Name
  • Tabellenblatt mit Name Variable:

    Dim TabellenblattName As String
    TabellenblattName = "aa"
    Worksheets(TabellenblattName).Activate

Tipps für Profis

  • Option Base 1 verwenden: Wenn Du möchtest, dass Arrays bei 1 beginnen, füge Option Base 1 am Anfang deines Moduls hinzu.

  • Verwendung von Set: Bei der Zuweisung von Arbeitsblättern solltest Du Set verwenden, um Objekte korrekt zu initialisieren:

    Dim Tabellenblatt As Worksheet
    Set Tabellenblatt = Worksheets("aa")
  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um Probleme beim Ansprechen von Arbeitsblättern zu vermeiden:

    On Error Resume Next
    Worksheets(TabellenblattName).Activate
    If Err.Number <> 0 Then
        MsgBox "Das Arbeitsblatt existiert nicht!"
    End If
    On Error GoTo 0

FAQ: Häufige Fragen

1. Wie kann ich ein Arbeitsblatt über eine Variable ansprechen?
Du kannst ein Arbeitsblatt ansprechen, indem Du den Namen des Arbeitsblatts in einer Variablen speicherst und dann die Worksheets-Methode verwendest.

2. Was ist der Unterschied zwischen Worksheets und Sheets?
Worksheets bezieht sich ausschließlich auf Arbeitsblätter, während Sheets auch Diagramme und andere Objekte in einer Arbeitsmappe umfasst.

3. Wie kann ich die Namen aller Arbeitsblätter in einer Schleife durchlaufen?
Du kannst die For Each-Schleife verwenden, um über die Worksheets-Sammlung zu iterieren:

Dim ws As Worksheet
For Each ws In Worksheets
    MsgBox ws.Name
Next ws

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige