beim drücken des Buttons "Drucken" oder nach Auswahl von Datei - Drucken möchte ich, daß ein Skript startet.
Wie mache ich daß ?
Danke und Gruß
Jochen
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Mein Makro
End Sub
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim strUnlocked As String
strUnlocked = "H22,C3:I3,D5:H5,D7:I54,B19:B21,B28:B30,B35:B37,B44:B46,B52:B54"
With ActiveSheet
.Unprotect
.Range(strUnlocked).Interior.ColorIndex = xlNone
.PrintOut
.Range(strUnlocked).Interior.ColorIndex = 19
.Protect
End With
End Sub
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim strUnlocked As String
Application.EnableEvents = False 'Ereignis AUS
strUnlocked = "H22,C3:I3,D5:H5,D7:I54,B19:B21,B28:B30,B35:B37,B44:B46,B52:B54"
With ActiveSheet
.Unprotect
.Range(strUnlocked).Interior.ColorIndex = xlNone
.PrintOut
.Range(strUnlocked).Interior.ColorIndex = 19
.Protect
End With
Application.EnableEvents = True 'Ereignis EIN
Cancel = True
End Sub
Sub Drucken()
Dim strUnlocked As String
strUnlocked = "H22,C3:I3,D5:H5,D7:I54,B19:B21,B28:B30,B35:B37,B44:B46,B52:B54"
With ActiveSheet
.Unprotect
.Range(strUnlocked).Interior.ColorIndex = xlNone
.PrintOut
.Range(strUnlocked).Interior.ColorIndex = 3
.Protect
End With
End Sub
Sub Drucker_einstellen()
SendKeys "%"
SendKeys "{down 13}" & "{enter}" & "{tab 5}" & "{down 1}"
End Sub
Sub drucken()
Dim strUnlocked As String
strUnlocked = "H22,C3:I3,D5:H5,D7:I54,B19:B21,B28:B30,B35:B37,B44:B46,B52:B54"
With ActiveSheet.Unprotect
ActiveSheet.Range(strUnlocked).Interior.ColorIndex = xlNone
SendKeys "%"
SendKeys "{down 13}" & "{enter}" & "{tab 5}" & "{down 1}"
ActiveSheet.Range(strUnlocked).Interior.ColorIndex = 19
ActiveSheet.Protect
End With
End Sub
Sub drucken()
Dim strUnlocked As String
strUnlocked = "H22,C3:I3,D5:H5,D7:I54,B19:B21,B28:B30,B35:B37,B44:B46,B52:B54"
With ActiveSheet.Unprotect
ActiveSheet.Range(strUnlocked).Interior.ColorIndex = xlNone
drucker_einstellen
ActiveSheet.Range(strUnlocked).Interior.ColorIndex = 19
ActiveSheet.Protect
End With
End Sub
Sub drucker_einstellen()
SendKeys "^p" & "{tab 5}" & "{down 1}"
End Sub
Sub drucken()
Dim strUnlocked As String
strUnlocked = "H22,C3:I3,D5:H5,D7:I54,B19:B21,B28:B30,B35:B37,B44:B46,B52:B54"
With ActiveSheet.Unprotect
ActiveSheet.Range(strUnlocked).Interior.ColorIndex = xlNone
ActiveSheet.Range(strUnlocked).Interior.ColorIndex = 19
ActiveSheet.Protect
End With
End Sub
Sub drucker_einstellen()
SendKeys "^p" & "{tab 5}" & "{down 1}"
End Sub
Um ein VBA-Skript nach dem Befehl Drucken auszuführen, kannst du das Workbook_BeforePrint-Ereignis verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:
Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.
Navigiere zum Arbeitsmappenmodul: Klicke im Projekt-Explorer auf „Diese Arbeitsmappe“.
Füge den Code ein: Kopiere und füge den folgenden Code ein:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim strUnlocked As String
strUnlocked = "H22,C3:I3,D5:H5,D7:I54,B19:B21,B28:B30,B35:B37,B44:B46,B52:B54"
With ActiveSheet
.Unprotect
.Range(strUnlocked).Interior.ColorIndex = xlNone
.PrintOut
.Range(strUnlocked).Interior.ColorIndex = 19
.Protect
End With
End Sub
Teste den Code: Gehe zurück zu Excel und drücke den Drucken-Button oder wähle Datei - Drucken. Dein Skript sollte jetzt ausgeführt werden.
Fehler: Das Skript wird nicht ausgeführt.
Fehler: Der Drucker wird nicht ausgewählt.
Cancel = True im Workbook_BeforePrint-Ereignis, um den Druckdialog anzuzeigen und den Druckprozess manuell zu starten.Fehler: Das Dokument wird zweimal gedruckt.
Application.EnableEvents = False zu Beginn des Codes und setze es am Ende wieder auf True.Eine alternative Methode besteht darin, ein separates Makro zu erstellen, das über eine Schaltfläche aufgerufen wird. Hier ist ein einfaches Beispiel:
Sub Drucken()
Dim strUnlocked As String
strUnlocked = "H22,C3:I3,D5:H5,D7:I54,B19:B21,B28:B30,B35:B37,B44:B46,B52:B54"
With ActiveSheet
.Unprotect
.Range(strUnlocked).Interior.ColorIndex = xlNone
.PrintOut
.Range(strUnlocked).Interior.ColorIndex = 19
.Protect
End With
End Sub
Du kannst diese Methode nutzen, um die Kontrolle über den Druckvorgang zu behalten.
Hier sind einige praktische Beispiele, wie du das Skript anpassen kannst:
Vorlesungsfolien drucken: Du kannst das Skript so anpassen, dass nur bestimmte Bereiche für das Drucken von Vorlesungsfolien hervorgehoben werden.
Drucker auswählen: Verwende SendKeys, um das Druckmenü zu öffnen und einen Drucker auszuwählen:
Sub Drucker_einstellen()
SendKeys "^p" 'Öffnet das Druckmenü
SendKeys "{tab 5}" 'Navigiert im Menü
SendKeys "{down 1}" 'Wählt den gewünschten Drucker
End Sub
Verwendung von Application.ScreenUpdating: Deaktiviere die Bildschirmaktualisierung während des Druckvorgangs, um die Leistung zu verbessern:
Application.ScreenUpdating = False
' Dein Druckcode hier
Application.ScreenUpdating = True
Fehlerbehandlung einbauen: Implementiere eine Fehlerbehandlung, um sicherzustellen, dass das Skript auch bei unerwarteten Fehlern stabil bleibt.
1. Wie kann ich sicherstellen, dass das Skript vor dem Drucken ausgeführt wird?
Stelle sicher, dass der Code im „Diese Arbeitsmappe“-Modul und nicht in einem Standardmodul eingefügt wurde.
2. Kann ich das Skript so anpassen, dass es zuerst einen Drucker auswählt, bevor es druckt?
Ja, du kannst SendKeys verwenden, um das Druckmenü zu öffnen und einen Drucker auszuwählen, bevor die .PrintOut-Methode aufgerufen wird.