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

Forumthread: mehrere Blätter per VBA auswählen

mehrere Blätter per VBA auswählen
21.06.2013 09:31:08
winnimom
Hallo Freaks,
ich möchte gerne per VBA mehrere Blätter auswählen (deren Name ich erstmal nicht kenne) und dann diese als pdf-Datei speichern. Z.Zt. habe ich folgenden code, der auch funktioniert, der aber noch nicht optimal ist, und zwar :
sheets(array(sheets(6),sheets(7),sheets(8))).select ...... und dann speichern.
ABER: da ich zukünftig unbestimmt viele Tabellenblätter auswählen möchte, bin ich an einer variablen Schreibweise interessiert - so z.B.
sheets(array(sheets(1 to 17)).select oder so ähnlich ?! So funktioniert's aber nicht. Hat einer nen Tip ?
Vielen Dank im Voraus

Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mehrere Blätter per VBA auswählen
21.06.2013 09:45:27
JACKD
So als Hilfestellung
Der Blattsammler ist dann dein Array was du ansprechen kannst =)
Sub sammeln()
Dim Blattsammler()
Dim i As Integer
For i = 0 To 1
ReDim Preserve Blattsammler(i)
Blattsammler(i) = Worksheets(i + 1).Name
Next
End Sub
Grüße
Grüße

Anzeige
AW: mehrere Blätter per VBA auswählen
21.06.2013 09:48:50
winnimom
Hi JACKD
aber wie muss dann mein select-Befehl aussehen ?
Sorry - steh' wohl auf'm Schlauch - DANKE

AW: mehrere Blätter per VBA auswählen
21.06.2013 09:56:59
JACKD
Hallo Winnimon
Worksheets(Blattsammler).Select
Grüße

AW: mehrere Blätter per VBA auswählen
21.06.2013 10:05:25
winnimom
Sorry - mein code lautet (weil ich auch nicht alle Tabellenblätter auswählen möchte, sondern hier z.B. nur das 6. , 7. und 8.) - deren Name schreibe ich ich eine dimensionierte Variable - funktioniert ja auch "zu Fuß"
dim tbs(3) as variant
tbs(1)=sheets(6).name
tbs(2)=sheets(7).name
tbs(3)=sheets(8).name
wenn ich jetzt analog zu deinem Vorschlag schreibe: sheets(tbs).select
dann sagt Excel "Index ausserhalb des gültigen Bereichs" - und nu ?

Anzeige
AW: mehrere Blätter per VBA auswählen
21.06.2013 10:09:19
JACKD
Ich glaube (weiss es aber nicht 100%ig)
Das der Index Arrays immer bei "0" beginnt(im Gegensatz zu Worksheets, die bei 1 Anfangen)
(wie dir sicher auch in meinem Code aufgefallen ist, den du aufmerksam studiert hast ) :-D
Also musst du die indexwerte deines Arrays jeweils um 1 reduzieren
Grüße

Anzeige
AW: mehrere Blätter per VBA auswählen
21.06.2013 10:13:45
winnimom
das stimmt (und weiss ich auch) - aber wie schreibe ich im Aufruf, dass ich nur die Blätter 1 bis 3 haben=aussuchen will:
zu Fuß : sheets(array(tbs(1),tbs(2),tbs(3))).select funktioniert ja auch !!
aber verkürzt ? : sheets(tbs(k),k=1,3)).select das funktioniert nicht !!
sorry für die Mühe
winnimom

Anzeige
AW: mehrere Blätter per VBA auswählen
21.06.2013 10:18:09
JACKD
so..?!
Dim tbs(2) As Variant
tbs(0) = Sheets(1).Name
tbs(1) = Sheets(2).Name
tbs(2) = Sheets(3).Name
Worksheets(tbs).Select

AW: mehrere Blätter per VBA auswählen
21.06.2013 10:21:09
winnimom
so klappt's - DANKE
aber dann muss ich vorher schon beim dimensionieren wissen,
wie gross die Dimension sein muss sprich wieviele Tabellenblätter ich auswählen möchte !?!?!
oder wie kann ich das mit "redim" machen ?
winnimom

Anzeige
AW: mehrere Blätter per VBA auswählen
21.06.2013 10:28:59
JACKD
Ja wäre schon hilfreich wenn du das weißt...
Zumal wenn du es eh zu Fuß machen willst (dann gibst du halt erst die Blätter ein, und anschliessend den index deines Array)
anders, wenn du es über eine Schleife machst dann kannst du das wie im beispiel immer weiter erhöhen
Grüße

Anzeige
AW: mehrere Blätter per VBA auswählen
21.06.2013 10:35:25
winnimom
Hi JACKD
ich hab's mit "redim preserve" hingekriegt !!!
Vielen Dank für deine Geduld
winnimom

AW: mehrere Blätter per VBA auswählen
21.06.2013 10:39:18
JACKD
Nur interesse Halber ..
wie sieht dein Code jetzt aus?
Grüße

AW: mehrere Blätter per VBA auswählen
21.06.2013 10:47:34
winnimom
dim tbs() as variant, k as integer
dim ws as worksheet
redim tbs(200) (nur vorsorglich so groß)
dann kommt ne Schleife, die unvorhersehbar "lang" wird
k=0
for each ws in worksheets
tbs(k) = ws.Name
k 0 k + 1
next ws
und dann das Wichtigste (hatte ich erst vergessen)
k = k - 1 !!!!!!
und dann :
redim preserve tbs(k)
sheets(tbs).select
und das klappt dann !! bei mir werden die gewünschten 74 Tabellenblätter ausgewählt
Vielen Dank nochmals
winnimom

Anzeige
AW: mehrere Blätter per VBA auswählen
21.06.2013 11:31:05
JACKD
Jetzt verstehe ich dein Ansinnen =)
Sub sammeln()
Dim tbs()
Dim i As Integer
For i = 0 To Worksheets.Count - 1
ReDim Preserve tbs(i)
tbs(i) = Worksheets(i + 1).Name
Next
Worksheets(tbs).Select
End Sub
So gehts auch =)
Ich wusste nicht das du einfach alle auswählen willst =)
Grüße

Anzeige
AW: mehrere Blätter per VBA auswählen
21.06.2013 12:50:27
winnimom
Prima - Danke
aber alle Tabellenblätter möchte ich nicht aus wählen !!
In der Schleife frage ich noch nach bestimmten Namen ab.
Diese lasse ich dann aus - deshalb war's ein wenig komplizierter.
Aber jetzt passt's !!!
;

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

Mehrere Blätter in Excel per VBA auswählen


Schritt-für-Schritt-Anleitung

Um mehrere Tabellenblätter in Excel per VBA auszuwählen, kannst du die folgende Schritt-für-Schritt-Anleitung befolgen. Diese Methode nutzt ein Array, um die gewünschten Blätter zu speichern.

  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)“, wähle „Einfügen“ und dann „Modul“.

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

    Sub mehrereTabellenblätterAuswählen()
       Dim tbs() As Variant
       Dim k As Integer
       Dim ws As Worksheet
       ReDim tbs(200) ' Größe anpassen falls nötig
    
       k = 0
       For Each ws In Worksheets
           If Not ws.Name Like "*BestimmterName*" Then ' Beispiel für Filter
               tbs(k) = ws.Name
               k = k + 1
           End If
       Next ws
    
       k = k - 1
       ReDim Preserve tbs(k)
       Worksheets(tbs).Select
    End Sub
  4. Code ausführen: Drücke F5, um das Makro auszuführen. Damit werden die gewünschten Tabellenblätter ausgewählt.


Häufige Fehler und Lösungen

1. Fehler: "Index außerhalb des gültigen Bereichs"

  • Lösung: Stelle sicher, dass der Index des Arrays korrekt ist. Arrays in VBA beginnen bei 0, während Worksheets bei 1 beginnen. Reduziere den Index entsprechend.

2. Fehler: Keine Blätter ausgewählt

  • Lösung: Überprüfe, ob die Schleife tatsächlich die gewünschten Blätter findet. Achte darauf, dass dein Filter richtig gesetzt ist.

Alternative Methoden

Eine alternative Methode wäre, alle Blätter ohne Filter auszuwählen:

Sub alleTabellenblätterAuswählen()
    Worksheets.Select
End Sub

Diese Methode ist einfacher, wenn du wirklich alle Blätter auswählen möchtest. Beachte, dass dies jedoch nicht für gezielte Auswahlen geeignet ist.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie du mehrere Tabellenblätter markieren kannst:

  1. Auswahl spezifischer Blätter:

    Sub spezifischeBlätterAuswählen()
       Sheets(Array("Blatt1", "Blatt2", "Blatt3")).Select
    End Sub
  2. Auswahl basierend auf einem bestimmten Kriterium:

    Sub blätterNachKriteriumAuswählen()
       Dim tbs() As Variant
       Dim i As Integer
       ReDim tbs(0)
    
       For i = 1 To Worksheets.Count
           If Worksheets(i).Name Like "Kriterium*" Then
               tbs(UBound(tbs)) = Worksheets(i).Name
               ReDim Preserve tbs(UBound(tbs) + 1)
           End If
       Next i
    
       ReDim Preserve tbs(UBound(tbs) - 1)
       Worksheets(tbs).Select
    End Sub

Tipps für Profis

  • Verwende Redim Preserve, um die Größe deines Arrays dynamisch anzupassen, wenn du die Anzahl der Blätter nicht im Voraus kennst.
  • Experimentiere mit Filterkriterien, um gezielt die Blätter auszuwählen, die du wirklich benötigst.
  • Halte deinen Code modular und dokumentiere wichtige Schritte, um die Wartbarkeit zu verbessern.

FAQ: Häufige Fragen

1. Frage: Wie kann ich ein Blatt auswählen, dessen Name ich nicht kenne?
Antwort: Du kannst eine Schleife verwenden, die alle Blätter durchläuft und auf bestimmte Kriterien überprüft, um das gewünschte Blatt auszuwählen.

2. Frage: Wie kann ich alle Tabellenblätter in Excel markieren?
Antwort: Verwende einfach Worksheets.Select oder Sheets.Select, um alle Tabellenblätter auszuwählen.

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