PDF unter 64Bit drucken

Moderator: ModerationP

PDF unter 64Bit drucken

Beitragvon RTausD » 23. Jul 2021, 23:37

Hallo allerseits,

unter Windows/Office 32 Bit hatte ich ein Makro, das die PDF-Dateien in ausgewählten eMails druckt.
Leider funktioniert das unter Windows/Office 64 Bit nicht mehr.
Kann mir jemand sagen, was ich an nachfolgendem Makro ändern muss?

Code: Alles auswählen
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Sub PDF_Anhang_to_TXT()
    Temppfad = "T:\Müll\"
    Dim aktuelle_eMail As MailItem
    Dim Anzahl_Dateianhänge As Integer
    Set Auswahl = Application.ActiveExplorer.Selection
    For Each aktuelle_eMail In Auswahl
        Anzahl_Dateianhänge = aktuelle_eMail.Attachments.Count
        If Anzahl_Dateianhänge > 0 Then
            For Z = Anzahl_Dateianhänge To 1 Step -1
                Datei = aktuelle_eMail.Attachments.Item(Z).FileName
                If Format(Right(aktuelle_eMail.Attachments.Item(Z).FileName, 3), ">") = "PDF" Then
                    Ziel = Temppfad & Datei
                    aktuelle_eMail.Attachments.Item(Z).SaveAsFile Ziel
                    ShellExecute 0, "print", Ziel, vbNullString, vbNullString, 0
                    On Error Resume Next
                    Kill Ziel
                    On Error GoTo 0
               End If
            Next Z
        End If
    Next
End Sub


Vielen Dank im Voraus

Rolf
RTausD
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 280
Registriert: 24. Feb 2007, 10:51

Re: PDF unter 64Bit drucken

Beitragvon RTausD » 24. Jul 2021, 00:06

Hallo allerseits,

ich habe es selbst gefunden. ;-)
Man muss die Declare-Funktion um PtrSafe ergänzen:

Code: Alles auswählen
Private Declare PtrSafe ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As


Viele Grüße

Rolf
RTausD
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 280
Registriert: 24. Feb 2007, 10:51

Re: PDF unter 64Bit drucken

Beitragvon RTausD » 24. Jul 2021, 00:08

Ach...

Jetzt habe ich den Code falsch eingefügt.

So muss es lauten:

Code: Alles auswählen
Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
RTausD
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 280
Registriert: 24. Feb 2007, 10:51

Re: PDF unter 64Bit drucken > neues Problem

Beitragvon RTausD » 25. Aug 2021, 10:49

Hallo allerseits,

grundsätzlich habe ich das Problem mit dem Drucken gelöst.
Ich habe allerdings das Problem, dass an einem Rechner der Druck herauskommt und an einem anderen nicht.

Ich habe den Code schon reduziert.
Mit dem nachfolgenden Code kann ich an einem Rechner drucken und an dem anderen nicht.
Ich habe es mit anderen installierten Druckern (sogar Microsoft Print to PDF) versucht und den Namen des Druckers aus der Systemsteuerung kopiert. Dann habe ich es ohne "\\srv-file02\" bzw. ganz ohne Druckername versucht. Das Problem bleibt leider das gleiche.

Code: Alles auswählen
Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Sub Test_Druck_Eingangsrechnungen()
    Dim aktuelle_eMail As MailItem
    Dim Anzahl_Dateianhänge As Integer
    Set olNsp = Application.Application.GetNamespace("MAPI")
    Set Ordner = Application.ActiveExplorer.CurrentFolder
    Zielpfad_ER = "S:\Rechnungen\"
    Drucker = "\\srv-file02\Kyocera ECOSYS M2540dn"
    Set Auswahl = Application.ActiveExplorer.Selection
    For Each aktuelle_eMail In Auswahl
        Anzahl_Dateianhänge = aktuelle_eMail.Attachments.Count
        For Z = 1 To Anzahl_Dateianhänge
            If Format(Right(aktuelle_eMail.Attachments.Item(Z).FileName, 3), ">") = "PDF" Then
                Ziel = Zielpfad_ER & "Test ER - " & aktuelle_eMail.Attachments.Item(Z).FileName
                aktuelle_eMail.Attachments.Item(Z).SaveAsFile Ziel
                Call ShellExecute(0&, "printto", Ziel, Chr(34) & Drucker & Chr(34), vbNullString, 0&)
            End If
        Next Z
    Next
    Hinweistext = "Es wurden  " & Auswahl.Count & " eMails mit Eingangsrechnungen verarbeitet."
    MsgBox Hinweistext, 0, "Analyse PDFs aus markierten eMails"
End Sub



Hat jemand eine Idee, woran das liegen kann?

VIELEN DANK im Voraus

Rolf
RTausD
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 280
Registriert: 24. Feb 2007, 10:51

Re: PDF unter 64Bit drucken

Beitragvon mmarkus » 25. Aug 2021, 15:07

Hallo Rolf,
2 Tipps habe ich für dich:
Pfad wie beim Druckernamen in Hochkomma setzen.
Rückgabewerte von ShellExecute auswerten, siehe: https://www.vbarchiv.net/api/api_shellexecute.html.

Möglicherweise gibt es weitere Rückgabewerte die nicht angeführt sind.
Da aber die weitere Doku fehlt kann ich da nicht viel sagen.
Ist die assoziierte Anwendung immer die Gleiche?

Edit:
Was die Deklaration für 64 Bit VBA betrifft:
Ich wollte das damals nicht erwähnen, da es mir nicht wichtig erschien.
Falls du wissen willst, wie das mit der Deklaration richtig funktioniert, dann solltest du folgenden Artikel studieren:

https://codekabinett.com/rdumps.php?Lan ... vba-64-bit
ms access what else
mmarkus
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2143
Registriert: 16. Apr 2012, 16:07
Wohnort: Oberösterreich


Zurück zu Outlook Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste

cron