Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1904to1908
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
mehrere Sheets selektieren in VBA
27.10.2022 14:49:49
David
Ein Hallo in die Runde,
Brauche mal wieder etwas Hilfe bei der Syntax (oder hab einen Denkfehler). Folgender Code funktioniert im Prinzip:
Ein Blatt wird kopiert, dann ein bestimmter Wert verändert, und dann das nächste...
Am Ende möchte ich alle neu erstellten Blätter in einer Datei ausdrucken.
Aus dem Makrorecoder habe ich folgende Syntax:

    Sheets(Array("G1", "G2", "G3", "G4", "G5", "G6", "G7", "G8")).Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1
dies würde ich zusammenfassen in:

    Sheets(Array("G1", "G2", "G3", "G4", "G5", "G6", "G7", "G8")).PrintOut
In meiner Vorstellung wird das Array als String im Verlauf "nachgebaut" und am Ende übergeben:

Private Sub CommandButton1_Click()
Dim Druckbereich As String, iCounter As Integer
iCounter = Selection.Count
For i = 1 To iCounter
Gehalt_M.Copy before:=Gehalt_M
Sheets(Gehalt_M.Name & " (" & i + 1 & ")").Range("C6") = Gehalt_M_Liste.Range("A" & i + 2)
Druckbereich = Druckbereich & """" & Gehalt_M.Name & " (" & i + 1 & ")" & """"
If i 
Leider erhalte ich beim Druckbefehl aber nun eine Fehlermeldung, obwohl der String exakt so aussieht wie im Recorder aufgezeichnet (zum Check dafür die "MsgBox"). Daher meine Frage:
Geht das in dieser Art und Weise und wenn ja, wo ist mein Fehler bzw. wenn nein, wie kriege ich das hin?
Danke und Gruß
David

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

Betreff
Datum
Anwender
Anzeige
AW: mehrere Sheets selektieren in VBA
27.10.2022 14:55:11
Rudi
Hallo,
so wird ein richtiges Array daraus:
Sheets(Split(Druckbereich,", ")).Printout
Gruß
Rudi
AW: mehrere Sheets selektieren in VBA
27.10.2022 15:15:57
David
Hallo Rudi,
danke, aber das funzt leider nicht: "Index außerhalb des gültigen Bereichs".
Hab auch noch zusätzlich

Sheets(Array(Split(Druckbereich, ", "))).PrintOut
probiert, das Gleiche...
In der MsgBox wird als String "G (2), "G (3)" angezeigt, was auch exakt (natürlich bis auf die "") den Blattnamen entspricht. Ich weiß leider nicht weiter.
Gruß
David
AW: mehrere Sheets selektieren in VBA
27.10.2022 15:31:01
Rudi
probier mal:

  Private Sub CommandButton1_Click()
Dim Druckbereich As String, iCounter As Integer, i As Integer
iCounter = Selection.Count
For i = 1 To iCounter
Gehalt_M.Copy before:=Gehalt_M
ActiveSheet.Range("C6") = Gehalt_M_Liste.Range("A" & i + 2)
Druckbereich = Druckbereich & "|" & ActiveSheet.Name
Next
Druckbereich = Mid(Druckbereich, 2)
Sheets(Split(Druckbereich, "|")).PrintOut
End Sub
Gruß
Rudi
Anzeige
AW: mehrere Sheets selektieren in VBA
27.10.2022 15:53:35
David
Leider nein, immer noch der gleiche Fehler.
Wenn ich allerdings die linken beiden Zeichen abschneide, fehlt das erste Anführungszeichen, das kann doch auch nicht richtig sein, oder?
Hat aber auch nicht mit "..., 1" funktioniert.
Ich habe auch mal den Druckbereich in eine Zelle schreiben lassen (aus der ersten Variante) und den String mit dem vom Makrorecorder verglichen, wurden als identisch angezeigt.
Gibt es keine Möglichkeit, das Array über die Sheet-Namen zu definieren anstatt über den Blattnamen? Mir fehlen hier Kenntnisse zur Syntax, die VBA-Hilfe ist da auch nicht ausführlich genug.
Danke und Gruß
David
Anzeige
AW: mehrere Sheets selektieren in VBA
27.10.2022 16:28:30
Daniel
HI
also bei mir funktioniert der Code von Rudi ohne Fehler.
ich verstehe dein Problem nicht.
Du sitzt vielleicht dem Irrtum auf, dass du glaubst, man könne VBA Code (also das was der Recorder aufzeichnet) im Makro selbst in einer String-Variable zusammenstellen und dann so ausführen lassen wie VBA-Code. aber das geht nicht.
Tatsächlich ist es so, dass Array("Tabelle1", "Tabelle2", "Tabelle3") exakt das gleiche ist, wie Split("Tabelle1|Tabelle2|Tabelle3", "|") und deswegen funktioniert der Code von Rudi.
Gruß Daniel
AW: mehrere Sheets selektieren in VBA
27.10.2022 16:41:02
Rudi
man kann die Blattnamen auch direkt in ein Array schreiben.

Private Sub CommandButton1_Click()
Dim iCounter As Integer, i As Integer
Dim arrToPrint()
iCounter = Selection.Count
ReDim arrPrint(iCounter - 1)
For i = 1 To iCounter
Gehalt_M.Copy before:=Gehalt_M
ActiveSheet.Range("C6") = Gehalt_M_Liste.Range("A" & i + 2)
arrToPrint(i - 1) = ActiveSheet.Name
Next
Sheets(arrToPrint).PrintOut
End Sub

Anzeige
AW: mehrere Sheets selektieren in VBA
28.10.2022 08:20:44
David
Hallo Rudi,
hier kommt bei der Zeile

arrToPrint(i - 1) = ActiveSheet.Name
der Fehler: "Index außerhalb des gültigen Bereichs"
Ich werde dann mal versuchen, die Mappe so zu bereinigen, dass ich sie hochladen kann. Vielleicht hab ich auch irgendeinen "strukturellen" (Denk)fehler im Aufbau, da ja auch Daniel geschrieben hat, dass der Code bei ihm geht.
Danke bis hierher.
Gruß
David
AW: mehrere Sheets selektieren in VBA
28.10.2022 13:31:39
David
Hallo Rudi,
wie angedro... ääh, ...kündigt, hier eine Beispieldatei. Vielleicht findet ja jetzt jemand den Fehler.
https://www.herber.de/bbs/user/155912.xlsm
Nochmal zur Idee und Vorgehensweise:
im Blatt "Gx" sollen in der Spalte A die auszudruckenden Belege markiert werden. Anschließend wird eine Kopie des Blattes "G" erstellt, die Belegnummer der ersten markierten Zelle eingetragen und dann der nächste, bis die markierten Belege abgearbeitet sind. Danach sollen alle erstellten Kopien in einem Rutsch gedruckt werden (Standard-Drucker ist auf pdf eingestellt), am Ende können die erstellten Belege wieder gelöscht werden. Nur die Blätter "Gx" und "G" müssen dauerhaft bleiben.
Danke und Gruß
David
Anzeige
AW: mehrere Sheets selektieren in VBA
28.10.2022 13:45:18
Daniel
Hi
da habt ihr bei der Variablenbenennung "geschlampt"
mal verwendet ihr "arrToPrint" und mal nur "arrPrint", obwohl wahrscheinlich das gleiche gemeint ist.
hier einfach auf durchgängige Variablenbenennung achten.
Gruß Daniel
AW: mehrere Sheets selektieren in VBA
27.10.2022 16:39:05
GerdL
Hallo,
welche Bedeutung haben "Gehalt_M" und "Selection.Count" ?
Gruß Gerd
ist doch logisch
27.10.2022 16:47:15
Rudi
hallo,
Gehalt_M ist ein WorkSheet, ebenso wir Gehalt_M_Liste.
Möglicherweise irgendwo vorher als Public dimensioniert und definiert oder der Codename der Worksheets.
Selection.Count ist die Anzahl der selektierten Zellen.
Aber wenn du das nicht weißt, ....
Gruß
Rudi
Anzeige
AW: ist doch logisch
27.10.2022 20:44:33
GerdL
Hallo Rudi,
eigentlich wollte ich eine Aussage von David haben.
Gruß Gerd
AW: ist doch logisch
27.10.2022 22:13:16
David
Hallo Rudi,
Gehalt_M ist der interne Name des Sheets. Ich habe in der Vergangenheit gelernt, besser damit zu arbeiten, als mit den Mappennamen, da diese sich schnell mal ändern können und dadurch Fehler produziert werden.
Gruß
David
AW: mehrere Sheets selektieren in VBA
27.10.2022 22:10:49
David
Hallo Gerd,
Gehalt_M ist ein Sheet (eine Art Formular), in dem abhängig von einer Variable verschiedener Content enthalten ist. Gehalt_M_Liste enthält eine Tabelle, in der zu jeder (fortlaufenden ) Variable verschiedene Werte stehen. Bisher war es so, dass ich dieses Formular mehrere Male im der Mappe hatte, in jeder einzelnen mit verschiedenen Werten. Diese werden einmal am Monatsende aktualisiert und alle zusammen ausgedruckt (pdf). Da in der Tabelle noch andere Blätter sind, ist das arg unübersichtlich geworden. Daher wollte ich das Formular auf ein "Master" beschränken, die verschiedenen Wert in einer Tabelle abhängig von einer Variable (=Belegnummer). Nun sollte nacheinander die verschiedenen Belegnummer eingetragen, das Formular gedruckt werden und dann das nächste, etc. Leider kann man (mMn) den pdf-Druck nicht ohne weiteres für mehrere Drucke nacheinander in einer Datei sammeln, es erscheint jedesmal ein einzelner Druckdialog und man hat am Ende mehrere pdfs, die man dann noch manuell zusammenfügen muss. Daher meine Idee, das Grundformular x-mal zu kopieren, in jedes eine andere Belegnummer, dann alle Blätter selektieren, ausdrucken und anschließend wieder löschen.
Dazu wird dann in der Liste der Bereich der Belegnummer markiert und über einen Commandbutton das Makro ausgelöst. Das ganze soll so variabel sein, dass ich wahlweise nur einen oder mehrere der Belege auswählen und drucken kann, daher die Zählung über Selection.Count.
Das Ganze wäre sicher über eine Beispielmappe besser verständlich sein, aber ich dachte, das eigentliche Problem wäre leichter zu lösen, der Rest funktioniert ja soweit. Zum Hochladen muss ich einiges an vertraulichen Daten entfernen, daher habe ich diesen Schritt erstmal aufgeschoben.
Aber vermutlich werde ich nicht darum herum kommen. Ich werde morgen noch Rudis letzten Tip versuchen und das dann entweder so lösen oder ich bastele eine Beispielmappe.
Aber danke für dein Interesse, auch wenn es zumindest mir hier nicht weiterhilft.
Gruß
David
Anzeige

90 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige