Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1024to1028
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

Druckmakro

Druckmakro
17.11.2008 17:37:02
Markus
Hallo zusammen,
ich habe folgendes Makro in eine Tabelle eingebaut:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Cancel = True
Range("9:15").EntireRow.Hidden = True
Application.EnableEvents = False
Application.Dialogs(xlDialogPrint).Show
Application.EnableEvents = True
Range("9:15").EntireRow.Hidden = False
End Sub


Wenn ich nun aber mehrere Tabellen gruppiere und dann ausdrucke, so findet das Makro nur auf dem ersten Tabellenblatt Anwendung, d.h. auf den nachfolgenden ausgedruckten Blättern finden sich die Zeilen wieder, die nicht ausgedruckt werden sollen. Drucke ich diie Tabellen nacheinander manuell, so ist alles wie gewünscht.
Aus diesem Grund würde ich gerne in einer Schleife beginnend mit dem ersten Tabellenblatt den Druckauftrag ausführen. Um die Sache zu verkomplizieren, soll vor dem jeweiligen Druckauftrag ein Abbruchfenster von drei Sekunden angezeigt werden, wo ich mittels eines Button (Druckauftrag abbrechen) den Druckauftrag für dieses ausgewählte TAbellenblatt abbrechen kann. Danach soll aber der Druckauftrag für das nächste Tabellenblatt kommen usw. usw.
Also kurz gesagt:
Erstes Tabellenblatt anzeigen
Abfrage (Druck abbrechen) drei Sekunden anzeigen (wenn in dieser Zeit Abbruch betätigt wird, dann ohne Druck nächstes Blatt anzeigen und Prozedur wiederholen). Wenn kein Abbruch, Blatt drucken und nächstes Blatt anzeigen mit der entsprechenden Druckabfrage.
Kann mir hier jemand helfen? Schleifen werde ich nämlich leider wohl nie kapieren.
Danke schön!
Viele Grüße
Markus

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Druckmakro
17.11.2008 18:11:00
Markus
Soweit bin ich der letzten halbe Stunde gekommen:

Sub Drucken2()
Dim Tabz As Integer
Dim i As Integer
Dim intwahl As Integer
Tabz = ActiveWorkbook.Worksheets.Count
For i = 1 To Tabz - 1
intwahl = MsgBox("Wollen Sie das Blatt drucken?", _
vbYesNo + vbQuestion, "Rückfrage")
If intwahl = 6 Then
Sheets(i).PrintOut Copies:=1, Collate:=True
Else
End If
Next i
End Sub


Aber wie bekomme ich es hin, dass das Fenster nach drei Sekunden selbt schließt und das Makro weiß, dass die Seite gedruckt werden soll? Und wenn möglich, soll das Fenster nicht in der Mitte sondern unten rechts angezeigt werden.

Anzeige
AW: Druckmakro
17.11.2008 18:18:33
Markus
Naja, so sieht es irgendwie besser aus - zumindest ist das Ergebnis ok

Sub Drucken2()
Dim Tabz As Integer
Dim i As Integer
Dim intwahl As Integer
Tabz = ActiveWorkbook.Worksheets.Count
For i = 1 To Tabz - 1
Sheets(i).Select
intwahl = MsgBox("Wollen Sie das Blatt drucken?", _
vbYesNo + vbQuestion, "Rückfrage")
If intwahl = 6 Then
Cancel = True
Range("9:15").EntireRow.Hidden = True
Sheets(i).PrintOut Copies:=1, Collate:=True
Range("9:15").EntireRow.Hidden = False
Else
End If
Next i
End Sub


Aber wie bekomme ich es hin, dass das Fenster nach drei Sekunden selbt schließt und das Makro weiß, dass die Seite gedruckt werden soll? Und wenn möglich, soll das Fenster nicht in der Mitte sondern unten rechts angezeigt werden.
Kann mir da jemand helfen? DAnke schön!

Anzeige
AW: Druckmakro
17.11.2008 18:30:30
fcs
Hallo Markus,
dass mit 3 Sekunden Meldung anzeigen, dann ggf. automatisch weitermachen ist etwas schwierig zu programmieren.
Einfacher ist es, jedes Blatt vor dem Drucken zu bestätigen.
Makro schaut dann etwa wie folgt aus. wobei hier der Druck auf den aktiven Drucker erfolgt. Im Moment wird noch die Seitenvorschau angezeigt. Das muss du anpassen, wenn alles funktioniert.
Gruß
Franz

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim objWks, arrBlatt
Cancel = True
Application.EnableEvents = False
For Each objWks In ActiveWindow.SelectedSheets
objWks.Activate
With objWks
Select Case ActiveSheet.Name
Case "Tabelle1", "Test"
'Namen der Blätter die ohne Zeilen ausblenden gedruckt werden sollen
If MsgBox("Blatt """ & .Name & """ drucken?", vbOKCancel, "Blatt-Selektion drucken") _
= vbOK Then
.PrintPreview
'         .PrintOut
End If
Case Else
.Range("9:15").EntireRow.Hidden = True
If MsgBox("Blatt """ & .Name & """ drucken?", vbOKCancel, "Blatt-Selektion drucken") _
= vbOK Then
.PrintPreview
'       .PrintOut
End If
.Range("9:15").EntireRow.Hidden = False
End Select
End With
Next
Application.EnableEvents = True
End Sub


Anzeige
AW: Druckmakro
17.11.2008 19:14:04
Markus
Hallo Franz,
vielen Dank für Deine Hilfe. Hatte in der Zwischenzeit auch etwas gebastelt. Beide Makros kommen zum gleichen Ergebnis. Ich lasse die Frage mal offen, vielleicht hat ja jemand noch eine zündende Idee. :-)
Also meine offene Frage:
Wie bekomme ich es hin, dass das Fenster nach drei Sekunden selbt schließt und das Makro weiß, dass die Seite gedruckt werden soll? Und wenn möglich, soll das Fenster nicht in der Mitte sondern unten rechts angezeigt werden.
AW: Druckmakro
17.11.2008 20:18:00
Tino
Hallo,
ich hoffe Deine Frage richtig verstanden zu haben.
Teste mal diesen Code, Massage Box wird nach 3 Sekunden automatisch geschlossen.
Option Explicit

Private Sub Workbook_BeforePrint(Cancel As Boolean)
 Dim objTab As Worksheet
 Dim Abfrage As Integer
 Dim WsShell As Object
 Set WsShell = CreateObject("WScript.Shell")
    
    Cancel = True
 Application.EnableEvents = False

 For Each objTab In ThisWorkbook.Worksheets
      If objTab.Visible = True Then
            objTab.Select
            objTab.Range("9:15").EntireRow.Hidden = True
        
            Abfrage = WsShell.Popup("Drucken der Tabelle: " & objTab.Name & " abbrechen?", 3, "geht weiter in 3 Sekunden")
        
                If Abfrage = -1 Then
                 objTab.PrintOut 'Drucken 
                End If
        
            objTab.Range("9:15").EntireRow.Hidden = False
       End If
 Next objTab

Application.EnableEvents = True

End Sub


Gruß Tino

Anzeige
AW: Druckmakro
17.11.2008 21:05:14
Markus
Hallo Tino,
perfekte Lösung, ich hatte schon nicht mehr mit Hilfe gerechnet.
Eine Frage hätte ich noch. Kann man der MsgBox auch Koordinaten mitgeben, damit ich die Box da platzieren kann, wo sie am wenigsten stört? Derzeit wird sie ja mittig angezeigt.
Nochmals danke und schon einmal schönen Abend.
AW: Druckmakro
17.11.2008 23:00:00
Tino
Hallo,
wüsste nicht wie dies gehen sollte, auch wenn es Funktionen gebe,
würde die nicht ausgeführt weil der Code bei der Anzeige stehen bleibt.
Vielleicht ginge es, wenn man ein externes Skript zuvor ablaufen lässt,
aber da bin ich jetzt auch überfragt.
Gruß Tino
Anzeige
AW: Druckmakro
18.11.2008 07:51:35
Danke
Danke!
AW: Druckmakro, Lösung mit kleinem Userform
18.11.2008 09:42:33
fcs
Hallo Markus,
ich hab nochmals ein wenig gebastelt.
Ein kleines Userform in Kombination mit der OnTime-Methode funktioniert auch.
Die Wartezeit kannst du im Modul mod_Timer einstellen, die Position des Userforms in der Initialize-Prozedur des Userforms.
Das Userform und das Modul kannst du "einfach" per Drag & drop in deine Datei kopieren. Die Prozedur unter MeineArbeitsmappe muss du kopieren und bzgl. der Blattnamen und Druckausgabe anpassen.
https://www.herber.de/bbs/user/56884.xls
Gruß
Franz
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige