Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Mehrere Tabellenblätter selektieren

Betrifft: Mehrere Tabellenblätter selektieren von: Andreas
Geschrieben am: 19.08.2004 09:00:44

Hallo zusammen,

Habe folgendes Problem:

Vor dem Drucken einer Exceldatei sollen die selektierten Blattnamen in eine Variable eingelesen werden und, nach dem Ausführen diverser Operationen, wieder selektiert werden, damit auch alle selektierten Blätter gedruckt werden.

Der Code sieht ungefähr so aus:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim sh As Worksheet
Dim Zaehler As Long
Dim Markiert As Variant
Zaehler = 0
Markiert = """"
For Each sh In ActiveWorkbook.Windows(1).SelectedSheets
Zaehler = Zaehler + 1
If Zaehler = 1 Then
Markiert = Markiert + sh.Name + """"
Else
Markiert = Markiert + "," + " " + """" + sh.Name + """"
End If
Next

-------------------------------------------------------------------
zwischen oberem und unterem Code werden diverse Arbeiten ausgeführt
-------------------------------------------------------------------

Sheets(Array(Markiert)).Select

Und genau in der obigen letzten Codezeile kommt der Debugger und meint, der Index sei ausserhalb des zulässigen Bereiches.

Weiss jemand wieso?

Die Variable "Markiert" enthält nach der Zuweisung der Blattnamen folgenden String:

"Blatt1", "Blatt2", "Blatt3"

mfg, Andreas

  


Betrifft: AW: Mehrere Tabellenblätter selektieren von: harry
Geschrieben am: 19.08.2004 10:03:39

hi andreas,
das kann so nicht funken. ein "Blatt1" liegt immer ausserhalb des gültigen index, da es nicht vorhanden ist, es heisst doch sicher Blatt1, oder?

ausserdem kann ich in deinem code kein array entdecken.

liebe grüße,
harry


  


Betrifft: AW: Mehrere Tabellenblätter selektieren von: Andreas
Geschrieben am: 19.08.2004 10:42:55

Die Namen der Tabellenblätter lauten natürlich anders, ich habe dies nur als Beispiel gebraucht.

Der Code sollte so aussehen (3 Blätter zusammen selektieren), damit mich der Debugger nicht belästigt:

Sheets(Array("Blatt1", "Blatt2", "Blatt3")).Select

Die Werte "Blatt1", "Blatt2", "Blatt3" befinden sich nun aber in der Variablen "Markiert".

Wenn ich aber diese Variable in den Code integriere, erscheint der Debugger:

Sheets(Array(Markiert)).Select

Wie integriere ich diese Variable in obigen Code?

mfg, Andreas


  


Betrifft: AW: Mehrere Tabellenblätter selektieren von: harry
Geschrieben am: 19.08.2004 11:22:17

meinte auch nicht den tatsächlichen namen, sondern die anführungszeichen. glaube nicht, dass du den codeteil Array("Blatt1", "Blatt2", "Blatt3") durch eine variable mit string ersetzen kannst. glaube, dass du die blätter mit

Dim Markiert() As Variant
ReDim Markiert(ActiveWindow.SelectedSheets.Count)
For Each sh In ActiveWindow.SelectedSheets
Zaehler = Zaehler + 1
Markiert(Zaehler) = sh.Name
Next

in ein array einlesen musst. beim markieren der blätter tüftle ich jetzt auch, funkt irgendwie noch nicht


  


Betrifft: AW: Mehrere Tabellenblätter selektieren von: Andreas
Geschrieben am: 19.08.2004 12:07:45

Danke für den Tipp, erscheint mir logisch.
Wie gebe ich in einer msgbox den Inhalt der Variablen "Markiert" aus?
Ich möchte den Inhalt überprüfen.
Folgendes funktioniert nicht:

MsgBox "Markierte Blätter = " & Markiert()

Das Markieren der Blätter am Schluss funkt hier auch noch nicht.

mfg, Andreas


  


Betrifft: AW: Mehrere Tabellenblätter selektieren von: harry
Geschrieben am: 19.08.2004 12:45:59

die namen kannst du mit einer schleife abrufen. man kann auch die blätter der reihe nach auswählen:

For i = 1 To Zaehler
Sheets(Array(Markiert(Zaehler))).Select
Next i

nur die mehrfachauswahl krieg ich noch nicht hin, aber ich arbeite dran. falls du es selbst findest, gib bitte bescheid, bevor ich vor verzweiflung depressionen bekomm :-)


  


Betrifft: AW: Mehrere Tabellenblätter selektieren von: Andreas
Geschrieben am: 19.08.2004 13:19:07

OK, habe bis jetzt leider noch nichts gefunden.

Das wäre mir aber gar nicht recht, wenn Du wegen meinem Problem auch noch Depressionen bekommst ;-)

mfg, Andreas


  


Betrifft: AW: Mehrere Tabellenblätter selektieren von: Andreas
Geschrieben am: 19.08.2004 15:37:58

Habs aufgegeben, eine vernünftige Lösung zu finden.

Der Code sieht jetzt so aus:

Dim sh As Worksheet
Dim Zaehler As Long
Zaehler = 0
Dim Markiert() As Variant
ReDim Markiert(ActiveWindow.SelectedSheets.Count)
Dim Blattzahl As Long
Blattzahl = ActiveWindow.SelectedSheets.Count
For Each sh In ActiveWindow.SelectedSheets
Zaehler = Zaehler + 1
Markiert(Zaehler) = sh.Name
Next

Diverse Operationen, Code ausgeschnitten....

If Blattzahl = 1 Then
Sheets(Markiert(1)).Select
End If
If Blattzahl = 2 Then
Sheets(Array(Markiert(1), Markiert(2))).Select
End If
If Blattzahl = 3 Then
Sheets(Array(Markiert(1), Markiert(2), Markiert(3))).Select
End If

Da die Anzahl Blätter in meiner Mappe bis zu 12 betragen kann, geht der Code weiter bis 12.
Ist ein wenig sehr umständlich, aber es funzt wenigstens.

mfg, Andreas


  


Betrifft: AW: Mehrere Tabellenblätter selektieren von: harry
Geschrieben am: 19.08.2004 16:17:36

bin auch nicht weitergekommen, im array wird zwar alles richtig abgespeichert, aber die auswahl der mappen funkt nicht.

bis zum nächsten mal,
harry


 

Beiträge aus den Excel-Beispielen zum Thema "Mehrere Tabellenblätter selektieren"