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

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

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
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
😅
Anzeige
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
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
Anzeige
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
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
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

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige