Guten Tag!
Ich möchte eine PDF-Datei die ich per VBA erstelle auch ausdrucken.
Das funktioniert leider nicht:
Option Compare Database
Option Explicit
Declare PtrSafe Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" (ByVal hwnd As LongPtr, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As _
String, ByVal nShowCmd As Long) As LongPtr
Public hwnd As Long
Public Const SW_HIDE = 0 ' Versteckt öffnen
Public Const SW_MAXIMIZE = 3 ' Maximiert öffnen
Public Const SW_MINIMIZE = 6 ' Minimiert öffnen
Public Const SW_NORMAL = 1
Public Const SW_RESTORE = 9
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_SHOWMINNOACTIVE = 7
Public Const SW_SHOWNOACTIVATE = 4
Public Function DateiOeffnen(Aktion As String, Pfad As String, _
Ansicht As Long) As Boolean
Call ShellExecute(0, Aktion, Pfad, "", "", Ansicht)
End Function
Aufruf:
'
' Dokument als PDF ausgeben
'
pdfPath = "\\HGVNAS\Public\Inventuren\Inventur " & DInv
objDocument.ExportAsFixedFormat OutputFileName:=pdfPath, ExportFormat:=wdExportFormatPDF
Das funktioniert!
DateiOeffnen "print", pdfPath, SW_MAXIMIZE
Da passiert gar nichts!
Kann mir da jemand helfen?
Vielen Dank für Eure Unterstützung.
Ich erkenne keinen offensichtlichen Fehler in deinem Code.
Schau doch mal:
a) Was passiert, wenn du anstelle von "print" "open" angibst oder die Aktion komplett weglässt.
b) Was der Rückgabewert von ShellExecute ist. Wenn nichts passiert, sollte das der Fehlercode sein.
Hallo PhilS,
bei Aktion open passiert ebenfalls nichts
Aktion "" leer passiert auch nichts
Wie kann ich den Rückgabewert von ShellExecute auslesen?
Dim Rueckgabe as Long
Rueckgabe = ShellExecute(....
Hallo PhilS,
sorry ich weiß wirklich nicht wohin mit Rueckgabe
Call ShellExecute(0, Aktion, Pfad, "", "", Ansicht)
Vor dem Call oder in Klammern?
Ok, ich dachte meine Codeskizze wäre aussagefähig genug.
Hier ausführlicher:
Dim Rueckgabe as Long
Rueckgabe = ShellExecute(0, Aktion, Pfad, "", "", Ansicht)
MsgBox Rueckgabe
Werte < 32 sind Fehlercodes.
Zur Info nachfolgend die Konstanten der Error Codes aus shellapi.h:
/* ShellExecute() and ShellExecuteEx() error codes */
/* regular WinExec() codes */
#define SE_ERR_FNF 2 // file not found
#define SE_ERR_PNF 3 // path not found
#define SE_ERR_ACCESSDENIED 5 // access denied
#define SE_ERR_OOM 8 // out of memory
#define SE_ERR_DLLNOTFOUND 32
/* error values for ShellExecute() beyond the regular WinExec() codes */
#define SE_ERR_SHARE 26
#define SE_ERR_ASSOCINCOMPLETE 27
#define SE_ERR_DDETIMEOUT 28
#define SE_ERR_DDEFAIL 29
#define SE_ERR_DDEBUSY 30
#define SE_ERR_NOASSOC 31
Public Function DateiOeffnen(Aktion As String, Pfad As String, _
Ansicht As Long) As Boolean
Dim Rueckgabe As Long
Rueckgabe = ShellExecute(0, Aktion, Pfad, "", "", Ansicht)
MsgBox Rueckgabe
End Function
führt aber zu einer Typenunverträglichkeit
Zitat von: tommytulpe am April 09, 2024, 16:54:12führt aber zu einer Typenunverträglichkeit
Stimmt.
Dim Rueckgabe As LongPtr
Also Fehlerode = 2
Kann aber nicht sein, Datei ist ja da.
Erklärung wäre ob in der ShellExecute kein UNC-Pfad erlaubt ist.
pdfPath = "\\HGVNAS\Public\Inventuren\Inventur " & DInv
objDocument.ExportAsFixedFormat OutputFileName:=pdfPath, ExportFormat:=wdExportFormatPDF
DateiOeffnen "print", pdfPath, SW_MAXIMIZE
Zitat von: tommytulpe am April 09, 2024, 17:28:47Erklärung wäre ob in der ShellExecute kein UNC-Pfad erlaubt ist.
Das ist definitiv nicht der Fall.
Mein Verdacht wäre eher, dass
ExportAsFixedFormat die Datei noch gar nicht vollständig geschrieben hat, wenn bereits
DateiOeffnen ausgeführt wird.
Das solltest du mal prüfen, indem du die beiden Operationen unabhängig voneinander ausführst.
Hallo PhilS,
ich muss mich tausend mal entschuldigen, das ich deine Zeit gestohlen habe.
In Pfad stand drin wo und mit welchem Namen das PDF ausgegeben wird.
Um das dann zu drucken muss ich natürlich den kompletten Pfad und Dateinahmen angeben....also mit .pdf.
In diesem Fall saß der Fehler wieder hinter der Tastatur.
Das funktioniert also problemlos.
Nochmal vielen Dank für deine Geduld und Unterstützung.
Ich setze das Thema auf erledigt.
Ganz kurze Frage:
da geht dann beim drucken das PDF-Programm auf.
Kann man das unterdrücken:
Zitat von: tommytulpe am April 09, 2024, 19:44:14da geht dann beim drucken das PDF-Programm auf.
Kann man das unterdrücken:
Wenn das PDF Programm das
nShowCmd Argument von ShellExecute beachtet, dann ja.
Also, dass das PDF Programm geöffnet wird kann man nicht unterdrücken, das muss es ja damit es drucken kann. Aber das sollte auch funktionieren, wenn das Programm nur unsichtbar geöffnet wird.
Okay, dann lass ich das so.
Vielen Dank nochmal und gute Zeit!