Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
908to912
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
908to912
908to912
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Variabler Druckbereich mit bed.Seitenumbruch

Variabler Druckbereich mit bed.Seitenumbruch
19.09.2007 21:51:00
Christian
Hallo liebes Forum,
folgendes Problem beabsichtige ich mit eurer Hilfe zu lösen:
In Tabelle 2 der Arbeitsmappe möchte ich 2 Druckbereiche festlegen und auswählen können.
Erster Druckbereich(Material): Von L20 bis zur letzten benutzten Zeile in Spalte Y.
Wichtig wäre hier eigentlich noch ein bedingter Seitenumbruch, es sind ab Zeile 20 immer 16 Zeilen belegt, danach kommt eine Leerzeile und danach wieder ein 16 Block, es wäre super, wenn mann die Blöcke immer im ganzen auf ein Blatt bekommt. Sahnehäubchen wäre, wenn der Bereich Tabelle2 A4:C9 noch als Kopfzeile in jedem Blatt mit auftauchen würde, ist aber sekundär.
Zweiter Druckbereich(Lohn): wie Material, nur der Bereich ist AA20 bis letzte benutzte Zeile in Spalte AN.
Auch hier wieder ein 16 Block mit Leerzeile.
Bisher habe ich mir mittels Indirekt und Verweis Formeln den Druckbereich per Formel und Name festgelegt,
aber der Seitenumbruch muss immer per Hand korrigiert werden, auf die Dauer nicht so schön.
Für Vorschläge und Anregungen meinen Dank im Voraus.
MfG Christian

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variabler Druckbereich mit bed.Seitenumbruch
20.09.2007 03:51:42
Wuxinese
Hallo Christian,
ich habe mal das folgende Makro probiert, ich denke, das kommt ungefaehr hin. Probiers einfach mal aus, ich hoffe, ich hab keinen Fehler reingebracht.
Gruss
Rainer

Option Explicit
Sub drucken()
Dim i, k As Double
Dim myHeader As String
With Worksheets("Tabelle2").PageSetup
myHeader = ""
For i = 4 To 9
If i > 4 Then myHeader = myHeader & vbCr
For k = 1 To 3
If k = 3 Then myHeader = myHeader & Worksheets("Tabelle2").Cells(i, k)
If k  3 Then myHeader = myHeader & Worksheets("Tabelle2").Cells(i, k) & " - "
Next k
Next i
.Orientation = xlLandscape
.Zoom = False
.FitToPagesTall = 1
.FitToPagesWide = 1
.LeftHeader = "&" & Chr(34) & "Arial" & Chr(34) & "&10" & myHeader
.TopMargin = 150
For i = 20 To Worksheets("Tabelle2").Range("y65536").End(xlUp).Row Step 17
.PrintArea = Worksheets("Tabelle2").Range("L" & i & ":Y" & i + 16).Address
Worksheets("Tabelle2").PrintOut
Next i
For i = 20 To Worksheets("Tabelle2").Range("an65536").End(xlUp).Row Step 17
.PrintArea = Worksheets("Tabelle2").Range("aa" & i & ":an" & i + 16).Address
Worksheets("Tabelle2").PrintOut
Next i
End With
End Sub


Anzeige
AW: Variabler Druckbereich mit bed.Seitenumbruch
20.09.2007 10:35:00
Christian
Hallo Rainer,
danke für Deinen Code, er funktioniert.
Jedoch wird jetzt jeder Block auf einer Seite im Querformat ausgedruckt, was bei 40 Blöcken 80 Seiten entspricht. Eigentlich nicht zu schlimm, aber die Kalkulation wird auch mal Archtikten vorgelegt, und das macht dann einen verschwenderischen Eindruck;-)
Kann man noch einen Auswahldialog einbauen, ob Material oder Lohn oder beides gdruckt werden sollen?
Gibt es die Möglichkeit, den Zoomfaktor(?) so einzustellen, das bspweise 5 Blöcke pro Seite im Hochformat ausgedruckt werden?
Wenn das alles zu aufwendig wird, bitte mitteilen, ich kann wie gesagt den Weg per Druckbereich mit Namensdefinition weiterhin beibehalten.
Falls Du die Beispielmappe brauchst, kann ich die ja mal hochladen.
MfG Christian

Anzeige
AW: Variabler Druckbereich mit bed.Seitenumbruch
20.09.2007 13:23:00
fcs
Hallo Christian,
ich hab das Makro von Rainer etwas "aufgebohrt".
1. Auswahl Druckbereich via MsgBox
2. 5 Blöcke je Seite
3. Hochformat
4. Seitennummerierung in Fusszeile
Gruß
Franz

Sub drucken()
Dim i&, k%, block%, s%, z&, zbl%
Dim myHeader As String
Test = MsgBox("Drucken?  Ja = Bereich Material, Nein = Bereich Lohn", _
vbQuestion + vbYesNoCancel, "Drucken Tabelle 2")
If Test = vbCancel Then Exit Sub
With Worksheets("Tabelle2").PageSetup
myHeader = ""
For i = 4 To 9
If i > 4 Then myHeader = myHeader & vbCr
For k = 1 To 3
If k = 3 Then myHeader = myHeader & Worksheets("Tabelle2").Cells(i, k)
If k  3 Then myHeader = myHeader & Worksheets("Tabelle2").Cells(i, k) & " - "
Next k
Next i
.Orientation = xlPortrait
.Zoom = False
.FitToPagesTall = 1
.FitToPagesWide = 1
.LeftHeader = "&" & Chr(34) & "Arial" & Chr(34) & "&10" & myHeader
.TopMargin = 150
If Test = vbYes Then
i = 20 'Startzeile für Druckbereich
block = 5 'Blöcke
zbl = 17 'Zeilen pro Block
For s = 1 To Application.WorksheetFunction.RoundUp((Worksheets("Tabelle2"). _
Range("y65536").End(xlUp).Row + 1 - i) / (block * zbl), 0)
z = Application.WorksheetFunction.Min(Worksheets("Tabelle2").Range("y65536").  _
_
End(xlUp).Row + 1, i + block * zbl - 1)
.RightFooter = "Seite " & s
.PrintArea = Worksheets("Tabelle2").Range("L" & i & ":Y" & z).Address
'                 Worksheets("Tabelle2").PrintPreview
Worksheets("Tabelle2").PrintOut
i = i + block * zbl
Next s
Else
i = 20 'Startzeile für Druckbereich
block = 5 'Blöcke
zbl = 17 'Zeilen pro Block
For s = 1 To Application.WorksheetFunction.RoundUp((Worksheets("Tabelle2"). _
Range("an65536").End(xlUp).Row + 1 - i) / (block * zbl), 0)
z = Application.WorksheetFunction.Min(Worksheets("Tabelle2").Range("an65536").  _
_
End(xlUp).Row + 1, i + block * zbl - 1)
.RightFooter = "Seite " & s
.PrintArea = Worksheets("Tabelle2").Range("aa" & i & ":an" & z).Address
'               Worksheets("Tabelle2").PrintPreview
Worksheets("Tabelle2").PrintOut
i = i + block * zbl
Next s
End If
End With
End Sub


Anzeige
AW: Variabler Druckbereich mit bed.Seitenumbruch
20.09.2007 13:46:00
Christian
Hallo Franz,
danke für Deine Unterstützung.
Das Makro macht genau das was es soll, vielen Dank für die gute Beschreibung der Funtionsweise des Codes!
Auch nochmal ein Dank an Rainer für die Erstellung des "Grundgerüstes"!
MfG Christian

Noch eine Frage
20.09.2007 14:34:00
Christian
Hallo Franz,
Hallo Forum,
kann man den Code dahingehend noch ergänzen, das man einen Drucker (Brother MFC 9030 oder PDF-Creator) auswählen kann?
Sorry für die weitere Anfrage, aber habe nicht gleich am Anfang daran gedacht!
Vielen Dank im Voraus
MfG Christian

AW: Noch eine Frage
20.09.2007 15:11:44
fcs
Hallo Christian,
ich hab die Drucker auswahl eingebaut, du muss nur die korrekten Bezeichnungen der Drucker auf deinem System eintragen. Hierzu einfach ein Makro aufzeichnen, bei dem du über das Menü Datei--Drucken... im Dialog den Drucker wechselst, Dialog schließen und dies dann für alle Drucker wiederholen.
Der PDF-Creator wird wahrscheinlich für jede Seite eine eigene Datei erzeugen, da jede Seite ein eigener Druckjob ist.
MfG
Franz

Sub drucken()
Dim i&, k%, block%, s%, z&, zbl%, Test&, Drucker$, DruckerMerken$
Dim myHeader As String
Test = MsgBox("Drucken?  Ja = Bereich Material, Nein = Bereich Lohn", _
vbQuestion + vbYesNoCancel, "Drucken Tabelle 2")
If Test = vbCancel Then Exit Sub
Drucker = InputBox("Bitte Drucker auswählen:" & vbLf _
& "0 = aktueller Drucker (" & Application.ActivePrinter & ")" & vbLf _
& "1 = Brother MFC 9030 " & vbLf _
& "2 = PDF-Creator" & vbLf, "Druckerauswahl", 0)
MerkenDrucker = Application.ActivePrinter
Select Case Drucker
Case "0"
'do nothing
Case "1"
Application.ActivePrinter = "HP LaserJet 4 auf LPT1:" '###DruckerName anpassen
Case "2"
Application.ActivePrinter = "Adobe PDF auf Ne01:" '###PDF Drucker anpassen
Case Else
If MsgBox("Druckerauswahl nicht korrekt!" & vbLf _
& "auf aktivem Drucker (" & Application.ActivePrinter & ") drucken?", _
vbOKCancel, "Druckerauswahl") = vbCancel Then
Exit Sub
End If
End Select
With Worksheets("Tabelle2").PageSetup
myHeader = ""
For i = 4 To 9
If i > 4 Then myHeader = myHeader & vbCr
For k = 1 To 3
If k = 3 Then myHeader = myHeader & Worksheets("Tabelle2").Cells(i, k)
If k  3 Then myHeader = myHeader & Worksheets("Tabelle2").Cells(i, k) & " - "
Next k
Next i
.Orientation = xlPortrait
.Zoom = False
.FitToPagesTall = 1
.FitToPagesWide = 1
.LeftHeader = "&" & Chr(34) & "Arial" & Chr(34) & "&10" & myHeader
.TopMargin = 150
If Test = vbYes Then
i = 20 'Startzeile für Druckbereich
block = 5 'Blöcke
zbl = 17 'Zeilen pro Block
For s = 1 To Application.WorksheetFunction.RoundUp((Worksheets("Tabelle2"). _
Range("y65536").End(xlUp).Row + 1 - i) / (block * zbl), 0)
z = Application.WorksheetFunction.Min(Worksheets("Tabelle2").Range("y65536").  _
_
End(xlUp).Row + 1, i + block * zbl - 1)
.RightFooter = "Seite " & s
.PrintArea = Worksheets("Tabelle2").Range("L" & i & ":Y" & z).Address
'                 Worksheets("Tabelle2").PrintPreview
Worksheets("Tabelle2").PrintOut
i = i + block * zbl
Next s
Else
i = 20 'Startzeile für Druckbereich
block = 5 'Blöcke
zbl = 17 'Zeilen pro Block
For s = 1 To Application.WorksheetFunction.RoundUp((Worksheets("Tabelle2"). _
Range("an65536").End(xlUp).Row + 1 - i) / (block * zbl), 0)
z = Application.WorksheetFunction.Min(Worksheets("Tabelle2").Range("an65536").  _
_
End(xlUp).Row + 1, i + block * zbl - 1)
.RightFooter = "Seite " & s
.PrintArea = Worksheets("Tabelle2").Range("aa" & i & ":an" & z).Address
Worksheets("Tabelle2").PrintPreview
'                 Worksheets("Tabelle2").PrintOut
i = i + block * zbl
Next s
End If
End With
'Drucker auf vorherige Auswahl zurücksetzen
Application.ActivePrinter = MerkenDrucker
End Sub


Anzeige
Danke und Ende
20.09.2007 15:40:00
Christian
Hallo Franz,
recht herzlichen Dank, klappt alles bestens, kleine Änderungen musste ich noch machen, da Unterstriche bei der Codierung hier im Forum eingefügt worden sind.
Mit Makro-Recorder habe ich die Bez. der Drucker herausgefunden.
Nochmals Danke für die tolle Unterstüztung!
MfG Christian

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige