Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Drucken bestimmter Felder
#1
Hallo zusammen,

Zur Erläuterung:

Ich wollte ein Code erzeugen, mit dem der Benutzer nur die "aktiven" Seiten in der Tabelle "Ausgabe" druckt, die in der gelb markierten Zelle etwas stehen hat ( die rechte Seite mit Nebenwerten gehört immer zur Seite mit den Hauptwerten ). Die zu druckenden Seiten befinden sich in grau eingerahmten Bereichen ( siehe angehängte Datei ).

hier meine Frage:

ich möchte gern die folgende Programmierung dahingehen ändern, dass man dem Benutzer überlässt mit welchem Drucker/PDF er drucken soll und dass ( bei PDF-Druck ) alle "aktiven" Seiten in einer PDF-Datei gedruckt werden. Mit dem momentanen Code werden alle "aktiven" Seiten hintereinander einzeln gedruckt am hinterlegten Drucker, d.h. dass der Benutzer nicht die Wahl hat zu entscheiden wie gedruckt werden soll ( ob auf Papier oder PDF ). Hier der Code:

Sub Drucken()
Dim i As Long
Dim lastRow As Long
Dim myStep As Long
Dim rngGelb As Range
Dim rngPrint1 As Range
Dim rngPrint2 As Range

Application.ScreenUpdating = False

With Worksheets("Ausgabe")
    .Visible = True
    lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
    For i = 1 To lastRow
        myStep = i + 57
        Set rngGelb = .Range("A" & i + 8)
        If rngGelb <> "" Then
            Set rngPrint1 = .Range("A" & i & ":O" & myStep - 1)
            .PageSetup.PrintArea = rngPrint1.Address
            '.PrintPreview
            .PrintOut
            Set rngPrint2 = .Range("Q" & i & ":AE" & myStep - 1)
            .PageSetup.PrintArea = rngPrint2.Address
            '.PrintPreview
            .PrintOut
        End If
        i = myStep
    Next i
    'oder: .Visible = xlVeryHidden
    .Visible = Hide
.DisplayAutomaticPageBreaks = False
End With

Set rngPrint1 = Nothing
Set rngPrint2 = Nothing
Set rngGelb = Nothing

End Sub

Kann mir da jemand behilflich sein?

Danke schon Mal ;)

Gruß

Andy


.xlsm   test.xlsm (Größe: 114,4 KB / Downloads: 5)
Antworten Top
#2
Hallo Andy,

setze diese Codezeile nach dem Application.Screenupdating = False ein

If Application.Dialogs(xlDialogPrinterSetup).Show = False then Exit Sub

dann werden als Erstes alle angeschossenen Drucker zur Auswahl angeboten und es wird mit dem ausgewählten gedruckt.
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
[-] Folgende(r) 1 Nutzer sagt Danke an Glausius für diesen Beitrag:
  • Andy_Garcia
Antworten Top
#3
Hallo Glausius,

danke für deinen Tipp. Das hat mich meinem Ziel schon näher gebracht.

Eine Sache wollte ich noch dem Benutzer ermöglich: Momentan werden alle Seiten einzeln gedruckt, d.h. dass der Benutzer (wenn mehrere Seiten als PDF zu drucken sind) jede einzelne Seite drucken muss. Die Seiten sollen allerdings zusammen in eine PDF-Datei gedruckt werden.

Hast du hierfür auch einen Vorschlag?

Gruß

Andy
Antworten Top
#4
Hallo Andy,

so ganz habe ich anhand deiner Datei und deiner Beschreibung nicht verstanden, was du erreichen willst.

Aber vielleicht ist es das - ermittele doch die Bereiche, die jeweils nur gedruckt werden sollen und baue deine beiden Druckbefehle dann zu einem zusammen, so nach diesem Muster:

Range("A6:O57,A64:O115,A122:O173,A180:O231,A238:O289").PrintOut Copies:=1

Das sind jeweils die Bereiche deiner Datei, die ein gelb hinterlegtes Feld in der Spalte A haben. Du musst den Anfang und das Ende des jeweiligen Bereiches, der aktiv ausgedruckt werden soll, ermitteln und als Variable in die obige Zeile einbauen.
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Antworten Top
#5
Achso, dann habe ich mich missverständlich ausgedrückt. Folgendes wollte ich erreichen:

wenn Zelle A1 <>"" dann drucke A1:O57 und Q1:AE57
  wenn Zelle A67 <>"" dann drucke A59:O115 und Q59:AE115
    ...

Wenn Blätter diese Bedingungen erfüllen, sollen sie zusammen gedruckt werden in einer PDF.

Falls die entsprechenden Zellen leer sind, sollen die beiden Seiten (links und recht) nicht gedruckt werden.


Hoffe ich habe die Problemstellung besser dargestellt.

Gruß
Antworten Top
#6
oder besser ausgedrückt:

wenn Zelle A1 <>"" dann füge  Seite A1:O57 und Seite Q1:AE57 zum Druck hinzu
  wenn Zelle A67 <>"" dann füge Seite A59:O115 und Seite Q59:AE115 zum Druck hinzu
    ...

drucke alle hinzugefügten Seiten
Antworten Top
#7
Hallo Andy,

ich habe dich schon verstanden, nur du hast den Lösungsvorschlag nicht verstanden!

Teste einmal diesen Code:

Code:
Option Explicit

Sub Drucken()
   Dim i As Long
   Dim lastRow As Long

   If Application.Dialogs(xlDialogPrinterSetup).Show = False then Exit Sub
   Application.ScreenUpdating = False
   With Worksheets("Ausgabe")
        .Visible = True
        lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
        For i = 1 To lastRow Step 57
            If .Range("A" & i + 8) <> "" Then
                .PageSetup.PrintArea = .Range("A" & i & ":O" & myStep - 1,"Q" & i & ":AE" & myStep - 1)
                '.PrintPreview
                .PrintOut
            End If
        Next i
        'oder: .Visible = xlVeryHidden
        .Visible = Hide
       .DisplayAutomaticPageBreaks = False
   End With
End Sub
oder wenn mehrere Bereiche zusammen ausgedruckt werden sollen, dann muss der Code so aufgebaut werden, dass die entsprechenden entscheidenden Zellen in der For-Next-Schleife abgefragt werden und je nach dem die PrintArea entsprechend erweitert werden.
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Antworten Top
#8
Hallo Clausius,

ich habe deinen Code eingesetzt und musste noch mystep als Long dimensionieren. Allerdings wird beim Ausführen folgender Fehler angezeigt: Fehler beim Kompilieren: Variable nicht definiert und es wird folgendes angezeigt :  siehe Attachment.

Habe ich was falsch eingegeben?

Gruß




Angehängte Dateien Thumbnail(s)
   
Antworten Top
#9
Hallo,

vielleicht so?

Code:
Sub Drucken()
    Dim i As Long
    Dim lastRow As Long
    Const myStep As Long = 57
    
    If Application.Dialogs(xlDialogPrinterSetup).Show = False Then Exit Sub
    Application.ScreenUpdating = False
    With Worksheets("Ausgabe")
        .Visible = True
        lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
        For i = 1 To lastRow Step myStep
            If .Range("A" & i + 8) <> "" Then
                .PageSetup.PrintArea = .Range("A" & i & ":O" & myStep - 1, "Q" & i & ":AE" & myStep - 1)
                '.PrintPreview
                .PrintOut
            End If
        Next i
        'oder: .Visible = xlVeryHidden
        .Visible = False
        .DisplayAutomaticPageBreaks = False
    End With
End Sub
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#10
hmm, leider kommt jetzt ein Laufzeitfehler 1004 und die Zeile mit
                .PageSetup.PrintArea = .Range("A" & i & ":O" & myStep - 1, "Q" & i & ":AE" & myStep - 1)
wird gelb markiert.

Funktioniert es denn bei dir?
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste