Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1332to1336
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
Inhaltsverzeichnis

Zwei Loops zusammenfügen

Zwei Loops zusammenfügen
23.10.2013 11:19:26
Thomas
Liebe Forumuser,
ich beisse mir gerade bei folgendem Excel die Zähne aus:
https://www.herber.de/bbs/user/87770.xlsm
Darin sind zwei Funktionierende Makros ("pdf_druck_vm_test_fil" und "pdf_druck_vm_test_vd_und_rm") mit jeweils einem Loop die ich zusammenfügen möchte.
Kurz zur Erklärung: Es sollte das Blatt "VD" als Gesamtes gedruckt, das Blatt "RM" setzt den Druckbereich jeweils auf ein Gebiet und das Blatt "Fil." sollte das selbe Gebiet markieren, hat jedoch eine andere Länge wie Blatt "RM".
Vielen Dank für Eure Mühe und Hilfe!
Thomas

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zwei Loops zusammenfügen
23.10.2013 21:27:09
fcs
Hallo Thomas,
du mussten die Schleifen doch ziemlich umgebaut werden, damit es funktioniert.
Die vielen Sheet-Activate hab ich ebenfalls beseitigt durch With ... End With-Konstrukte.
mfg
Franz
Sub pdf_druck_vm_test_allesdrucken() '3 Blätter drucken
Dim VMmaxS%, VMmaxZ&, RMmaxS%, RMmaxZ&, DatNam$
Dim Anfang&, Zeile&, AktVG As Byte, FilAktVG As Byte
Dim FilMaxS&, FilMaxZ&, FilAnfang&, FilZeile&
'VM Druckbereich setzen
With Sheets("VD")
VMmaxS = .Cells(3, 1).CurrentRegion.Columns.Count
VMmaxZ = .Cells(3, 1).CurrentRegion.Rows.Count
.PageSetup.PrintArea = .Range(.Cells(1, 1), .Cells(VMmaxZ, VMmaxS))
End With
'Fil Einstellungen
With Sheets("Fil.")
FilMaxS = .Cells(3, 1).CurrentRegion.Columns.Count
FilMaxZ = .Cells(3, 1).CurrentRegion.Rows.Count
FilAnfang = 3
FilZeile = 3
FilAktVG = .Cells(FilZeile, 4) 'Fil. Druckbereich setzen
End With
'RM Einstellungen
With Sheets("RM")
RMmaxS = .Cells(3, 1).CurrentRegion.Columns.Count
RMmaxZ = .Cells(3, 1).CurrentRegion.Rows.Count
Anfang = 3
Zeile = 3
AktVG = .Cells(Zeile, 4) 'RM Druckbereich setzen
End With
Do
Application.StatusBar = "Erstelle PDF-Datei für " & AktVG
With Sheets("RM")
Do
If .Cells(Zeile + 1, 4)  "" And .Cells(Zeile + 1, 4)  AktVG Then
.PageSetup.PrintArea = _
.Range(.Cells(Anfang, 1), .Cells(Zeile, RMmaxS)).Address
Exit Do
End If
Zeile = Zeile + 1
Loop Until Zeile > RMmaxZ
End With
With Sheets("Fil.")
Do
If .Cells(FilZeile + 1, 4)  "" And .Cells(FilZeile + 1, 4)  FilAktVG Then
.PageSetup.PrintArea = _
.Range(.Cells(FilAnfang, 1), .Cells(FilZeile, FilMaxS)).Address
Exit Do
End If
FilZeile = FilZeile + 1
Loop Until FilZeile > FilMaxZ
End With
'Blätter Markieren
Sheets(Array("VD", "RM", "Fil.")).Select
'PDF erstellen
DatNam = "C:\" & "Umsatz_FB_VG" & AktVG & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=DatNam, _
Quality:=xlQualityMinimum, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
With Sheets("RM") 'RM Parameter ändern
'Hier If da Hr. Holzleitner keine Zahl
If IsNumeric(.Cells(Zeile + 1, 4)) Then
AktVG = .Cells(Zeile + 1, 4)
Anfang = Zeile + 1
Else
AktVG = .Cells(Zeile + 2, 4)
Anfang = Zeile + 2
End If
End With
With Sheets("Fil.")  'Fil. Parameter ändern
'Hier If da Hr. Holzleitner keine Zahl
If IsNumeric(.Cells(FilZeile + 1, 4)) Then
FilAktVG = .Cells(FilZeile + 1, 4)
FilAnfang = FilZeile + 1
Else
FilAktVG = .Cells(FilZeile + 2, 4)
FilAnfang = FilZeile + 2
End If
End With
Zeile = Zeile + 1
FilZeile = FilZeile + 1
Sheets("VD").Select
Loop Until Zeile >= RMmaxZ - 1
Application.StatusBar = False
End Sub

Anzeige
AW: Zwei Loops zusammenfügen
24.10.2013 08:11:49
Thomas
Hallo Franz,
vielen Dank für deine Hilfe.
Das Makro funktioniert jetzt super. Ich muss mir nur noch die Logik dahinter näher anschauen :)
Hmja OK das Sheet-Activate ist jetzt nicht allzu anzusehen aber abgesehen davon macht das With ... End With-Konstrukt etwas anders bzw. hat das Vorteile gegenüber dem Sheet-Activate?
lg
Thomas

AW: Zwei Loops zusammenfügen
24.10.2013 08:18:24
Thomas
Ah noch was... wieso hast du überall einen . bei z.B. .cells bei .Cells(3, 1).CurrentRegion.Columns.Count gesetzt?
danke & lg
Thomas

AW: Zwei Loops zusammenfügen
24.10.2013 10:01:05
fcs
Hallo Thomas,
durch weglassen der Activate-Anweisung ist der Ablauf am Bildschirm ruhiger. Der Bildschirm muss nicht ständig zwischen den Blättern umschalten.
Der "." vor Cells und Range ist erforderlich in Verbindung mit With.
Der "." bedeutet, dass sich dieses Objekt auf auf das oberhalb dieser Zeile hinter With angegebene Objekt bezieht.
Ist kein Punkt angegeben, dann beziehen sich Cells und Range in einem allgemeinen Modul immer auf das aktive Tabellenblatt, in einem Tabellenblatt-Modul immer auf das Tabellenblatt, unter dem der Code steht.
mfg
Franz

Anzeige
AW: Zwei Loops zusammenfügen
24.10.2013 11:03:48
Thomas
Alles klar - danke dir Franz für die Hilfe.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige