Thema Datum  Von Nutzer Rating
Antwort
Rot Excel VBA - PDF-Convert über Kommandozeile
01.04.2019 12:19:30 Reini
NotSolved
02.04.2019 18:23:32 Ulrich
NotSolved
02.04.2019 18:24:53 Ulrich
NotSolved
03.04.2019 14:59:56 Gast45437
NotSolved

Ansicht des Beitrags:
Von:
Reini
Datum:
01.04.2019 12:19:30
Views:
868
Rating: Antwort:
  Ja
Thema:
Excel VBA - PDF-Convert über Kommandozeile

Hallo,

ich habe ein Excel-Makro gebastelt um eine Input-Datei zu einer PDF-Datei zu konvertieren und zu speichern, das alles soll über die Kommandozeile ohne weitere Bestätigungen ablaufen.

Das Makro wird wie folgt abgerufen:
 

"C:\Program Files\Microsoft Office\root\Office16\excel.exe" /e /q "C:\Macro.xlsm" inputFile.xls /a

Nach Aufruf des Markos, scheint die Input-Datei aber ignoriert zu werden, und es wird versucht die Macro.xlsm zu drucken, welche leer ist.

Hier ist der vollständige Code:

Option Explicit

Private Sub Workbook_Open()
    Dim CmdRaw As Long
    Dim CmdLine As String
    Dim Args As String
    Dim ArgArray As Variant

    CmdRaw = GetCommandLine
    CmdLine = CmdToStr(CmdRaw)

    Args = ""

    If InStr(CmdLine, " /a") > 0 Then
        Args = Mid(CmdLine, InStr(1, CmdLine, " /a") + 4)
        If Args <> "" Then
            Call Module2.Xlsx2Pdf(Args)
            Application.OnTime Now + TimeValue("00:00:05"), "ThisWorkbook.Save_Exit"
        End If
    End If
End Sub

Sub Save_Exit()
Application.Quit
ThisWorkbook.Close Saved = True
End Sub

CMD-Modul

Option Explicit
'declare the kernel32 functions to extract the commandline arguments
'GetCommandLineW returns the command line argument in number format
Declare PtrSafe Function GetCommandLine Lib "kernel32" Alias "GetCommandLineW" () As Long
'This function is for getting the length of the commandline arguments
Declare PtrSafe Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As Long
'RtlMoveMemory will copy the specified data to the buffer
Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (MyDest As Any, MySource As Any, ByVal MySize As Long)

'Convert the command line from number format to string format
Public Function CmdToStr(Cmd As Long) As String
Dim Buffer() As Byte, StrLen As Long

If Cmd Then
   StrLen = lstrlenW(Cmd) * 2
   If StrLen Then
       ReDim Buffer(0 To (StrLen - 1)) As Byte
       CopyMemory Buffer(0), ByVal Cmd, StrLen
       CmdToStr = Buffer
   End If
End If
End Function

Xlsx2Pdf Modul

Sub Xlsx2Pdf(wkFile As String)
'
' Xlsx2Pdf Macro
'
Workbooks.Open Filename:=wkFile
NewFilename = (Replace(wkFile, ".xlsx", ".pdf"))
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        NewFilename, Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False
Application.Quit
End Sub

Ist für jemanden ersichtlich wo der Fehler liegt? Ich scheitere leider selber schon seit einer gewissen Zeit daran.

Danke!


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Excel VBA - PDF-Convert über Kommandozeile
01.04.2019 12:19:30 Reini
NotSolved
02.04.2019 18:23:32 Ulrich
NotSolved
02.04.2019 18:24:53 Ulrich
NotSolved
03.04.2019 14:59:56 Gast45437
NotSolved