Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Userform Fenster drucken

Userform Fenster drucken
10.11.2019 18:03:27
Manuel
Hallo Leute
Ich möchte gerne ein Userform-Fenster per Button wie gezeigt drucken. Es soll das Fenster zur Druckerauswahl erscheinen.
Userform lautet: Messwerte
CommandButton lautet: Drucken
Befehl:
Application.Dialogs(xlDialogPrint).Show
Messwerte.printform
Bzw.
Application.Dialogs(xlDialogPrint).Show
Me.printform
wurden getestet, jedoch wird hier nur das Tabelenblatt ausgedrückt und nicht wie erwünscht das Userform-Fenster
Bitte um einen Lösungsvorschlag
Danke im Vorhinein
Manuel
Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform Fenster drucken
10.11.2019 19:19:35
Nepumuk
Hallo Manuel,
teste mal:
Option Explicit

Public Sub PrintUserForm()
    Dim objWMI As Object, objItem As Object
    Dim strDefaultPrinter As String
    Dim strOldPrinter As String, strNewPrinter As String
    Dim ialngIndex As Long
    Dim avntTemp As Variant
    strOldPrinter = Application.ActivePrinter
    If Application.Dialogs(xlDialogPrinterSetup).Show Then
        Set objWMI = GetObject("winmgmts:\\.\root\cimv2"). _
            ExecQuery("SELECT * FROM Win32_Printer WHERE DEFAULT = 'True'")
        For Each objItem In objWMI
            strDefaultPrinter = objItem.Name
        Next
        avntTemp = Split(Application.ActivePrinter)
        For ialngIndex = LBound(avntTemp) To UBound(avntTemp) - 2
            strNewPrinter = strNewPrinter & avntTemp(ialngIndex) & " "
        Next
        strNewPrinter = Trim$(strNewPrinter)
        Set objWMI = GetObject("winmgmts:\\.\root\cimv2"). _
            ExecQuery("SELECT * FROM Win32_Printer WHERE Name = '" & strNewPrinter & "'")
        For Each objItem In objWMI
            Call objItem.SetDefaultPrinter
        Next
        Call Load(Object:=UserForm1)
        Call UserForm1.PrintForm
        Call Unload(Object:=UserForm1)
        Set objWMI = GetObject("winmgmts:\\.\root\cimv2"). _
            ExecQuery("SELECT * FROM Win32_Printer WHERE Name ='" & strDefaultPrinter & "'")
        For Each objItem In objWMI
            Call objItem.SetDefaultPrinter
        Next
        Set objWMI = Nothing
        Application.ActivePrinter = strOldPrinter
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: Userform Fenster drucken
10.11.2019 20:40:26
Manuel
Hallo Nepumuk
Vielen lieben Dank
Genau an so etwas habe ich mir gewünscht, nur leider funktioniert das noch nicht so richtig. Es ist egal welche Einstellung bei einem x-beliebigen drücke durchführe, es wird immer in Hochformat gedruckt.
Des Weiteren „verschiebt“ also umgestaltet das Makro mir die kopfzeile am Arbeitsblatt
Leider hab ich nur wenig ahnung was das Makro durchführt
Weißt du Vlt wo das Problem liegt ?
Lg
Manuel
Anzeige
AW: Userform Fenster drucken
10.11.2019 20:55:59
Manuel
Zu dem Arbeitsblatt: bei Auswahl auf Querformat bei Drucker wird nicht der Druckbereich sondern das Arbeitsblatt auf Querbereich gestellt
😅
AW: Userform Fenster drucken
10.11.2019 20:56:01
Manuel
Zu dem Arbeitsblatt: bei Auswahl auf Querformat bei Drucker wird nicht der Druckbereich sondern das Arbeitsblatt auf Querbereich gestellt
😅
AW: Userform Fenster drucken
11.11.2019 09:49:26
Nepumuk
Hallo Manuel,
dann müssen wir das ganz anders machen.
In einem Standardmodul (Menüleiste in VBA-Editor - Einfügen - Modul):
Option Explicit
Private Declare Function MapVirtualKeyA Lib "user32.dll" ( _
ByVal wCode As Long, _
ByVal wMapType As Long) As Long
Private Declare Sub keybd_event Lib "user32.dll" ( _
ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
Private Const KEYEVENTF_KEYUP As Long = &H2
Public Sub PrintMe()
Dim lngAltScan As Long
Dim objWorksheet As Worksheet
Dim strOldPrinter As String
strOldPrinter = Application.ActivePrinter
If Application.Dialogs(xlDialogPrinterSetup).Show Then
lngAltScan = MapVirtualKeyA(vbKeyMenu, 0&)
Call keybd_event(vbKeyMenu, lngAltScan, 0&, 0&)
Call keybd_event(vbKeySnapshot, 0&, 0&, 0&)
DoEvents
Call keybd_event(vbKeyMenu, lngAltScan, KEYEVENTF_KEYUP, 0&)
Set objWorksheet = ThisWorkbook.Worksheets.Add
With objWorksheet
Call .Paste
.PageSetup.Orientation = xlLandscape
Call .PrintOut
Application.DisplayAlerts = False
Call .Delete
Application.DisplayAlerts = True
End With
Set objWorksheet = Nothing
Application.ActivePrinter = strOldPrinter
End If
End Sub

Im Modul des UserForms der Code eines CommandButtons zum Drucken des UserForms:
Private Sub CommandButton1_Click()
Call PrintMe
End Sub

Gruß
Nepumuk
Anzeige
AW: Userform Fenster drucken
12.11.2019 14:31:24
Manuel
Hallo Nepumuk,
danke vielmals.
Leider funktioniert dies auch nicht wie erwünscht. Die Druckereinstellung und Druckerauswahl ist wieder nur bedingt möglich.
Gibt es eine einfache möglichkeit, das nur das Fenster "Messwerte"(Userform) als Bild gespeichert und dann gedruckt wird ? Vor dem Druck soll wie bei einem normalen Bild das Fenster zur Druckerauswahl aufgerufen werden.
Liebe Grüße
Danke
Manuel
Anzeige
AW: Userform Fenster drucken
12.11.2019 14:43:29
Nepumuk
Hallo Manuel,
das Userform als Bild zu speichern ist kein Problem. Aber es dann drucken schon. Mit dem letzten Code wird ein ScreenShot des UserForms in eine neue Tabelle eingefügt und diese dann gedruckt.
Gruß
Nepumuk
AW: Userform Fenster drucken
12.11.2019 21:08:46
Manuel
Hallo Nepumuk,
danke dir, werde morgen noch etwas dran arbeiten.
kannst du mir bitte den Behl schicken, welches mir das userform als pdf bzw. als bild speichert und dann öffnet ? Denn dann muss nur auf drucken gedrückt werden und fertig
Danke
Schönen Abend
Manuel
Anzeige
AW: Userform Fenster drucken
12.11.2019 21:09:33
Manuel
*Befehl
AW: Userform Fenster drucken
13.11.2019 09:13:48
Nepumuk
Hallo Manuel,
dann so:
Option Explicit
Private Declare Function MapVirtualKeyA Lib "user32.dll" ( _
ByVal wCode As Long, _
ByVal wMapType As Long) As Long
Private Declare Sub keybd_event Lib "user32.dll" ( _
ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
Private Const KEYEVENTF_KEYUP As Long = &H2
Public Sub PrintMe()
Dim lngAltScan As Long
Dim objWorksheet As Worksheet
lngAltScan = MapVirtualKeyA(vbKeyMenu, 0&)
Call keybd_event(vbKeyMenu, lngAltScan, 0&, 0&)
Call keybd_event(vbKeySnapshot, 0&, 0&, 0&)
DoEvents
Call keybd_event(vbKeyMenu, lngAltScan, KEYEVENTF_KEYUP, 0&)
Set objWorksheet = ThisWorkbook.Worksheets.Add
With objWorksheet
Call .Paste
.PageSetup.Orientation = xlLandscape
Call .ExportAsFixedFormat(Type:=xlTypePDF, _
Filename:=ThisWorkbook.Path & "\Userform.pdf", _
Quality:=xlQualityStandard, IgnorePrintAreas:=False, _
OpenAfterPublish:=True)
Application.DisplayAlerts = False
Call .Delete
Application.DisplayAlerts = True
End With
Set objWorksheet = Nothing
End Sub

Gruß
Nepumuk
Anzeige
AW: Userform Fenster drucken
13.11.2019 20:20:39
Manuel
hallo nepumuk,
danke erstmals,
leider bin ich mit dieser Lösung nicht ganz glücklich da selten aber doch Fehler auftreten.
ich habe mir jetzt selbst eine Lösung gebastelt, jedoch benötige ich noch den Aufruf von Druckereinstellung des ausgewählten Druckers (von Userform Liste). Hier soll das Format, Quer bzw. Hochformat eingestellt werden.
Anbei noch mein Makro
Private Declare PtrSafe Sub Sleep Lib "kernel32.dll" ( _
ByVal dwMilliseconds As Long)
Private Sub Bestätigen_Click()
Dim strPrinter As String
Dim objWMI As Object, objItem As Object
Call Repaint
strPrinter = Application.ActivePrinter
Set objWMI = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * from Win32_Printer")
For Each objItem In objWMI
If objItem.Name = Druckerauswahl.Liste Then
objItem.SetDefaultPrinter
Exit For
End If
Next
Call Sleep(1000)
Call Messwerte_CableCoil.PrintForm
Set objWMI = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * from Win32_Printer")
For Each objItem In objWMI
If InStr(1, strPrinter, objItem.Name) > 0 Then
objItem.SetDefaultPrinter
Exit For
End If
Next
Set objWMI = Nothing
Set objItem = Nothing
End Sub

Private Sub Schließen_Click()
Unload Druckerauswahl
End Sub

Private Sub UserForm_Initialize()
Label1.Caption = "Drucken von:"
Label2.Caption = Worksheets("Prüfprotokoll").Range("B3") & "-" & Worksheets("Prüfprotokoll"). _
Range("B14") & "_" & Messwerte_CableCoil.Messung
Dim Printer As Object
Dim Bereich_Printer As Range
Dim Zelle_Printer As Range
Set Printer = CreateObject("Scripting.Dictionary")
With Worksheets("Eingaben")
Set Bereich_Printer = .Range(.Range("AV4"), .Range("AV11").End(xlDown))
End With
For Each Zelle_Printer In Bereich_Printer
Printer(Zelle_Printer.Value) = 0
Next
Druckerauswahl.Liste.List = Printer.keys
End Sub
Drucker werden abgerufen und in die Zellen AV4:AV11 gelistet.
Hast du hier eine Idee ?
Anzeige
AW: Userform Fenster drucken
14.11.2019 09:12:27
Nepumuk
Hallo Manuel,
welche Fehlernummer welcher Fehlertext in welcher Prozedur welche Zeile markiert der Debugger?
Oder soll ich es mir aussuchen?
Gruß
Nepumuk
AW: Userform Fenster drucken
14.11.2019 17:45:53
Manuel
Hall nepumuk
Der Fehler tritt bei Call .Paste auf (aber nicht immer)
Lg
AW: Userform Fenster drucken
15.11.2019 09:45:38
Nepumuk
Hallo Manuel,
ich sehe in deinem gezeigten diese Zeile nicht.
Gruß
Nepumuk
Anzeige
AW: Userform Fenster drucken
15.11.2019 10:04:28
Manuel
Hallo Nepumuk,
das ist mein Code, hier werden alle installierten Drucker angezeigt und können ausgewählt werden. Funktioniert auch ziemlich gut.
Was ich "nur" benötigte ist: es soll nach Auswahl des Druckers die Druckereinstellung auf A3 und Querformat umgestellt werden bzw. sich ein Fenster öffnen wo das eingestellt werden kann.
Lg
Manuel
Anzeige
AW: Userform Fenster drucken
15.11.2019 10:42:33
Nepumuk
Hallo Manuel,
dieses Fenster lässt sich nicht per VBA steuern.
Gruß
Nepumuk
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Userform Fenster drucken in Excel VBA


Schritt-für-Schritt-Anleitung

Um ein Userform-Fenster in Excel VBA zu drucken und die Druckerauswahl anzuzeigen, folge diesen Schritten:

  1. Öffne den VBA-Editor: Drücke ALT + F11.

  2. Füge ein neues Modul hinzu: Gehe zu Einfügen > Modul.

  3. Füge den folgenden Code ein:

    Option Explicit
    Private Declare Function MapVirtualKeyA Lib "user32.dll" ( _
    ByVal wCode As Long, _
    ByVal wMapType As Long) As Long
    Private Declare Sub keybd_event Lib "user32.dll" ( _
    ByVal bVk As Byte, _
    ByVal bScan As Byte, _
    ByVal dwFlags As Long, _
    ByVal dwExtraInfo As Long)
    Private Const KEYEVENTF_KEYUP As Long = &H2
    
    Public Sub PrintUserForm()
       Dim lngAltScan As Long
       Dim objWorksheet As Worksheet
       lngAltScan = MapVirtualKeyA(vbKeyMenu, 0&)
       Call keybd_event(vbKeyMenu, lngAltScan, 0&, 0&)
       Call keybd_event(vbKeySnapshot, 0&, 0&, 0&)
       DoEvents
       Call keybd_event(vbKeyMenu, lngAltScan, KEYEVENTF_KEYUP, 0&)
       Set objWorksheet = ThisWorkbook.Worksheets.Add
       With objWorksheet
           Call .Paste
           .PageSetup.Orientation = xlLandscape
           Call .PrintOut
           Application.DisplayAlerts = False
           Call .Delete
           Application.DisplayAlerts = True
       End With
       Set objWorksheet = Nothing
    End Sub
  4. Erstelle einen Button im Userform: Füge einen CommandButton hinzu, um den Druckvorgang zu starten.

  5. Füge den folgenden Code zum Button hinzu:

    Private Sub CommandButton1_Click()
       Call PrintUserForm
    End Sub

Mit diesem Code kannst du das Userform drucken und gleichzeitig das Fenster zur Druckerauswahl aufrufen.


Häufige Fehler und Lösungen

  • Problem: Das Userform wird nicht korrekt gedruckt.

    • Lösung: Stelle sicher, dass du den PrintUserForm-Befehl korrekt aufrufst und dass das Userform sichtbar ist.
  • Problem: Druckformat wird nicht beachtet.

    • Lösung: Überprüfe die Druckereinstellungen im Dialogfenster und stelle sicher, dass das Format auf Querformat oder Hochformat eingestellt ist.
  • Problem: Fehler bei Call .Paste.

    • Lösung: Dieser Fehler kann sporadisch auftreten. Stelle sicher, dass das Userform aktiv ist, wenn du den Druckbefehl ausführst.

Alternative Methoden

Eine alternative Methode besteht darin, das Userform als Bild zu speichern und dann zu drucken. Hier ein Beispielcode:

Public Sub SaveUserFormAsImage()
    ' Speichern des Userforms als Bild
    ' Hier könnte der Code folgen, um das Userform als Screenshot zu speichern und zu drucken.
End Sub

Diese Methode ist nützlich, wenn du das Userform als Fensterbilder drucken möchtest.


Praktische Beispiele

  1. Drucken eines Userforms mit spezifischer Druckerauswahl:

    Public Sub PrintWithPrinterSelection()
       If Application.Dialogs(xlDialogPrinterSetup).Show Then
           Call PrintUserForm
       End If
    End Sub
  2. Drucken des Userforms als PDF:

    Call .ExportAsFixedFormat(Type:=xlTypePDF, Filename:="C:\Path\To\Your\File.pdf", OpenAfterPublish:=True)

Diese Beispiele zeigen, wie du die Funktionalität des excel makro drucken mit druckerauswahl erweitern kannst.


Tipps für Profis

  • Überlege, die Druckereinstellungen über VBA zu steuern, um spezifische Formate zu setzen.
  • Nutze PrintForm in Kombination mit der Druckerauswahl, um sicherzustellen, dass das richtige Gerät verwendet wird.
  • Halte deine VBA-Bibliotheken aktuell, um sicherzustellen, dass alle Funktionen reibungslos laufen.

FAQ: Häufige Fragen

1. Wie kann ich das Userform als PDF speichern? Du kannst den Befehl ExportAsFixedFormat verwenden, um das Userform als PDF zu speichern.

2. Funktioniert dieser Code in allen Excel-Versionen? Der bereitgestellte Code sollte in den meisten modernen Excel-Versionen funktionieren, insbesondere ab Excel 2010.

3. Kann ich mehrere Userforms drucken? Ja, du kannst die PrintForm-Funktion für jedes Userform aufrufen, um sie nacheinander zu drucken.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige