Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1580to1584
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
Userform mit nicht Standartdrucker drucken
03.10.2017 07:33:18
Philip
Hallo zusammen
Ich möchte eine Userform drucken, dass funktioniert auch mit „me.printform“ . Nur hätte ich die Userform gerne auf einem anderen Drucker gedruckt, das klappt aber nicht.
Kann mir da jemand helfen?
Grüsse

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform mit nicht Standartdrucker drucken
03.10.2017 08:37:39
Hajo_Zi
stelle den Standarddrucker doch um. Das ist wahrscheinlich das einfachste.

Ich gebe keinen Dank für eine Rückmeldung, da ich durch solche Beiträge nicht meine Beitragszahl erhöhen muss.
Also ich schreibe keine Beiträge mit dem Betreff "Gerne u. Danke für die Rückmeldung. o.w.T."
Rückmeldung ist ja in der Heutigen Zeit nicht üblich und die wenigen die eine Rückmeldung geben, mögen mir das verzeihen, das kein Danke für eine Rückmeldung kommt.
AW: Userform mit nicht Standartdrucker drucken
03.10.2017 09:52:11
Philip
Hallo
Auf diese idee währe ich auch gekommen aber ich muss diese eine Userform auf einem anderen Drucker ausdrucken und möchte nicht jedesdmal den Drucker umstellen da ich das recht oft müsste.
GRuss Philip
Anzeige
zum Beispiel so:
03.10.2017 08:37:45
RPP63
Moin!
Dim actPr$
actPr = Application.ActivePrinter
Application.ActivePrinter = "Dingsbums bunt auf Ne02:"
Me.Printform
Application.ActivePrinter = actPr
Gruß Ralf
AW: zum Beispiel so:
03.10.2017 09:49:41
Philip
Hallo Ralf
Ich habe es so probiert jedoch wird immernoch nur beim Standartdrucker gedruckt.
der Standartdrucker ist ein Netzwerkdrucker kann das einen einfluss haben?
Gruss Philip
AW: zum Beispiel so:
03.10.2017 10:09:54
RPP63
Stelle mal manuell auf den Netzwerkdrucker um und frage die Bezeichnung mittels folgendem ab:
MsgBox Application.ActivePrinter
Dieser String ist jetzt DEIN "Dingsbums bunt"
Gruß Ralf
Anzeige
AW: zum Beispiel so:
03.10.2017 10:29:04
Philip
Hallo RalfHabe ich probiert funktioniert aber auch nicht. Es soll ja auch nicht mit dem Netzwerkdrucker gedruckt werden sondern mit einem anderen.
Der Druckername mit dem gedruckt werden soll ist "Canon MF220 Series auf Ne04:" habe ich so aus dem Direktfenster.
Gruss
AW: zum Beispiel so:
03.10.2017 10:31:20
Philip

Private Sub CommandButton1_Click()
CommandButton1.Visible = False
Dim actPr
actPr = Application.ActivePrinter
Application.ActivePrinter = "Canon MF220 Series auf Ne04:"
Me.Printform
Application.ActivePrinter = actPr
CommandButton1.Visible = True
End Sub
Das ist mein aktuller Code.
GRuss
Anzeige
Du hast Recht!
03.10.2017 10:54:42
RPP63
Habe es jetzt getestet.
Ist tatsächlich so, dass Me.PrintForm hier eine Sonderstellung einnimmt.
In einer Tabelle klappt das nämlich problemlos.
Habe mir jetzt mal die Hilfe-Seite angesehen:
"Der durch PrintForm verwendete Drucker wird von den Einstellungen in der Systemsteuerung des Betriebssystems bestimmt."
https://msdn.microsoft.com/de-de/library/office/gg264778.aspx
Warum, wissen wohl nur die MS-Götter …
Nebenbei habe ich den Befehl noch nie benutzt und werde dies alleine schon aus Layout-Gründen nie tun.
Sorry, dass ich Dir nicht weiter helfen kann.
Ralf
Anzeige
AW: zum Beispiel so:
03.10.2017 11:06:33
Nepumuk
Hallo Philip,
teste mal:
Private Sub CommandButton1_Click()
    
    Dim strPrinter As String
    Dim objWMI As Object, objItem As Object
    
    CommandButton1.Visible = False
    Call Repaint
    
    strPrinter = Application.ActivePrinter
    
    Set objWMI = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * from Win32_Printer")
    For Each objItem In objWMI
        If objItem.Name = "Canon MF220 Serie" Then
            objItem.SetDefaultPrinter
            Exit For
        End If
    Next
    
    Call 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

Gruß
Nepumuk
Anzeige
AW: zum Beispiel so:
03.10.2017 12:10:03
Philip
Hallo Nepumuk
ICh habe deinen Code probiertg funktioniert jedoch auch nicht.
Gruss
AW: zum Beispiel so:
03.10.2017 12:23:07
Nepumuk
Hallo Philip,
"funktioniert nicht" ist eine unzureichende Beschreibung. Ich nehme mal an, die Bezeichnung des Druckers stimmt nicht. Kopiere mal folgendes Makro in eine neue Mappe und lass es laufen. Es werden alle eingerichteten Drucker aufgelistet. Dann kannst du den korrekten Namen in das vorherige Makro kopieren.
Option Explicit

Public Sub AlleDrucker()
    Dim objWMI As Object, objItem As Object
    Dim lngRow As Long
    Set objWMI = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * from Win32_Printer")
    For Each objItem In objWMI
        lngRow = lngRow + 1
        Cells(lngRow, 1).Value = objItem.Name
    Next
End Sub

Gruß
Nepumuk
Anzeige
AW: zum Beispiel so:
03.10.2017 13:09:17
Philip
Hallo Nepumuk
Ich war vorhin ein bissche kurz angebunden hatte zu wenig zeit um den Code durchzuschauen. es war nur der Drucker der nicht stimmte. jetz funktioniert es einwandfrei.
Vielen Dank.
Aber habe jetz doch noch eine Frage zu dem Code und zwar kannst du mir erklähren was dass er macht?
Ist supper dass er funktioniert würde ihn jedoch auch gerne verstehen.
Gruss Philip
AW: zum Beispiel so:
03.10.2017 13:29:08
Nepumuk
Hallo Philip,
der Code sucht alle installierten Drucker über WMI (Windows Management Instrumentation). Dann klappert er in einer Schleife alle Drucker nach dem bestimmten Drucker durch und setzt ihn als Standarddrucker ein. Nachdem dann das Userform gedruckt wurde macht es das selbe nochmal, aber setzt diesmal den aktiven Drucker von Excel als Standarddrucker ein.
Mehr zu WMI findest du hier:
https://de.wikipedia.org/wiki/Windows_Management_Instrumentation
https://msdn.microsoft.com/en-us/library/aa394582(v=vs.85).aspx
https://msdn.microsoft.com/de-de/library/dn151197.aspx
Gruß
Nepumuk
Anzeige
AW: zum Beispiel so:
03.10.2017 15:27:38
Philip
Hallo Nepumuk
Es funktioniert leider doch noch nicht ganz wie gewünscht. Wenn ich die Aktion mehrmals ausführen will funktionierts beim erstenmal und danach nimmt er wieder den Standarddrucker.
Ich kriege es einfach nicht hin.
Hoffe du kannst mir nochmals helfen.
GRuss
AW: zum Beispiel so:
03.10.2017 16:11:35
Nepumuk
Hallo Philip,
eventuell kommt der Druckbefehl zu schnell. Teste mal (Achtung, du musst den Drucker wieder umbenennen !!!):
Private Declare Sub Sleep Lib "kernel32.dll" ( _
    ByVal dwMilliseconds As Long)

Private Sub CommandButton1_Click()
    
    Dim strPrinter As String
    Dim objWMI As Object, objItem As Object
    
    CommandButton1.Visible = False
    Call Repaint
    
    strPrinter = Application.ActivePrinter
    
    Set objWMI = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * from Win32_Printer")
    For Each objItem In objWMI
        If objItem.Name = "Microsoft XPS Document Writer" Then
            objItem.SetDefaultPrinter
            Exit For
        End If
    Next
    
    Call Sleep(1000)
    
    Call 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

Gruß
Nepumuk
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige