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

Forumthread: Namen aller Tabellenblätter in ein Array schreiben

Namen aller Tabellenblätter in ein Array schreiben
Martin
Hallo liebe Excelprofis,
gibt es eine Möglichkeit ohne eine Schleife die Namen aller Tabellenblätter in ein Array zu schreiben? Ich habe es so probiert, aber ohne Erfolg:
Sub Versuch()
Dim ArrTabellen As Variant
ArrTabellen = Array(ActiveWorkbook.Worksheets)
End Sub
Mit einer Schleife ist es mir hingegen gelungen:
Sub Loesung()
Dim i As Integer
Dim ArrTabellen As Variant
ReDim ArrTabellen(0 To ActiveWorkbook.Sheets.Count - 1)
For i = 1 To ActiveWorkbook.Sheets.Count
ArrTabellen(i - 1) = Sheets(i).Name
Next i
End Sub
Meine Frage stelle ich nur aus Interesse, vielleicht kann ich von euch mal wieder etwas lernen.
Viele Grüße
Martin
Anzeige
AW: Namen aller Tabellenblätter in ein Array schreiben
04.11.2010 12:49:18
Peter
Hallo Martin,
so sollte das funktionieren:
Option Explicit
Public Sub Blattnamen()
Dim WkSh      As Worksheet
Dim vBlatt()  As String
Dim iIndx     As Integer
For Each WkSh In ThisWorkbook.Worksheets
ReDim Preserve vBlatt(iIndx)
vBlatt(iIndx) = WkSh.Name
iIndx = iIndx + 1
Next WkSh
For iIndx = LBound(vBlatt) To UBound(vBlatt)
MsgBox vBlatt(iIndx)
Next iIndx
End Sub
Gruß Peter
Anzeige
AW: Namen aller Tabellenblätter in ein Array schreiben
04.11.2010 13:03:59
Martin
Hallo Peter,
vielen Dank für deine Antwort. Ich dachte, dass es eventuell eine Möglichkeit gibt direkt über die "Array-Funktion" Arr = Array(Tabelle1,Tabelle2,Tabelle3) die Argumentenliste (also Tabellenblätter) irgendwie (in der Art "ActiveWorkbook.Worksheets") an das Array übergeben werden könnten. Aber das geht so scheinbar nicht. Ich dachte nur, man könnte es so ein wenig einfacher machen.
Viele Grüße
Martin
Anzeige
AW: Namen aller Tabellenblätter in ein Array schreiben
04.11.2010 13:04:59
Rudi
Hallo Peter,
sorry, aber er wollte die Namen ohne Schleife in das Array schreiben.
Außerdem ist die ständige Neudimensionierung des Arrays was für den Popo.
Gruß
Rudi
AW: Namen aller Tabellenblätter in ein Array schreiben
04.11.2010 13:54:20
fcs
Hallo Martin,
deklariere eine Variable als Sheets.
Dieser kannst du dann die Blätter per Set zuweisen. Die Variable verhält sich ähnlich wie ein Array, ist jedoch ein Auflistungs-Objekt.
Gruß
Franz
Sub aaSheetsArray()
Dim arrSheets As Sheets, oSheet As Object, iIndex As Integer
Set arrSheets = ActiveWorkbook.Worksheets
For Each oSheet In arrSheets
MsgBox "Blatt " & oSheet.Index & ": " & oSheet.Name
Next
For iIndex = 1 To arrSheets.Count
MsgBox "Blatt " & arrSheets(iIndex).Index & ": " & arrSheets(iIndex).Name
Next
End Sub

Anzeige
Super, genau das habe ich mir vorgestellt
04.11.2010 14:35:01
Martin
Hallo Franz,
schön, dann habe ich doch wieder etwas neues gelernt. Vielen Dank für deine hilfreiche Antwort!
Schöne Grüße
Martin

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Namen aller Tabellenblätter in ein Array schreiben


Schritt-für-Schritt-Anleitung

Um die Namen aller Tabellenblätter in ein Array zu schreiben, kannst du die folgende Methode verwenden. Diese Methode verwendet eine Schleife, um die Blattnamen zu erfassen und in einem Array zu speichern.

Sub NamenInArray()
    Dim i As Integer
    Dim ArrTabellen As Variant
    ReDim ArrTabellen(0 To ActiveWorkbook.Sheets.Count - 1)

    For i = 1 To ActiveWorkbook.Sheets.Count
        ArrTabellen(i - 1) = Sheets(i).Name
    Next i
End Sub

In diesem Beispiel wird ein Array (ArrTabellen) erstellt, das die Namen aller Arbeitsblätter (Sheets) des aktiven Arbeitsbuchs enthält.


Häufige Fehler und Lösungen

  1. Fehler: "Typ nicht definiert"

    • Stelle sicher, dass du die richtige Excel-Version verwendest, die VBA unterstützt.
  2. Fehler: "Index außerhalb des gültigen Bereichs"

    • Dieser Fehler tritt auf, wenn du versuchst, auf ein Blatt zuzugreifen, das nicht existiert. Überprüfe, ob die Anzahl der Blätter korrekt ist.
  3. Lösung für Schleifenverwendung

    • Wenn du die Namen ohne Schleife einlesen möchtest, kann das problematisch sein. Die Nutzung der Array-Funktion funktioniert nicht direkt mit Worksheets.

Alternative Methoden

Eine alternative Methode, um die Namen in ein Array zu speichern, ist die Verwendung eines Sheets-Objekts. Dies kann dir helfen, die Blätter effizienter zu handhaben.

Sub SheetsArray()
    Dim arrSheets As Sheets
    Dim oSheet As Object
    Dim iIndex As Integer
    Set arrSheets = ActiveWorkbook.Worksheets

    For Each oSheet In arrSheets
        MsgBox "Blatt: " & oSheet.Name
    Next oSheet
End Sub

Diese Methode verwendet ein Sheets-Objekt, das sich ähnlich wie ein Array verhält, aber keine Schleifen benötigt, um die Blätter zu durchlaufen.


Praktische Beispiele

Hier sind einige praktische Beispiele zur Verwendung von vba sheets array, um die Blattnamen zu speichern:

  1. Namen aller Tabellenblätter in einer MsgBox anzeigen

    Sub AnzeigenBlattnamen()
       Dim vBlatt() As String
       Dim WkSh As Worksheet
       Dim iIndx As Integer
    
       For Each WkSh In ThisWorkbook.Worksheets
           ReDim Preserve vBlatt(iIndx)
           vBlatt(iIndx) = WkSh.Name
           iIndx = iIndx + 1
       Next WkSh
    
       For iIndx = LBound(vBlatt) To UBound(vBlatt)
           MsgBox vBlatt(iIndx)
       Next iIndx
    End Sub
  2. Speichern der Namen in einer Excel-Liste

    Sub SpeichernInExcelListe()
       Dim i As Integer
       Dim ArrTabellen As Variant
       ReDim ArrTabellen(1 To ActiveWorkbook.Sheets.Count)
    
       For i = 1 To ActiveWorkbook.Sheets.Count
           ArrTabellen(i) = Sheets(i).Name
           Cells(i, 1).Value = ArrTabellen(i)
       Next i
    End Sub

Tipps für Profis

  • Nutze ReDim Preserve, um die Größe deines Arrays dynamisch anzupassen, ohne die bereits vorhandenen Daten zu verlieren.
  • Versuche, die Blätter in einer Collection oder Dictionary zu speichern, wenn du zusätzliche Funktionen benötigst.
  • Experimentiere mit Excel VBA Tabelle in Array einlesen, um die Daten aus den Blättern zu verarbeiten.

FAQ: Häufige Fragen

1. Wie kann ich die Namen aller Tabellenblätter ohne Schleife in ein Array speichern? Es gibt keine direkte Möglichkeit, die Namen ohne eine Schleife zu speichern. Du musst eine Schleife verwenden, um die Blattnamen nacheinander zu erfassen.

2. Was ist der Unterschied zwischen Sheets und Worksheets in VBA? Sheets bezieht sich auf alle Blätter eines Arbeitsbuchs, einschließlich Diagramme und Tabellen, während Worksheets nur auf die Arbeitsblätter verweist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige