Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: xlsm mit Kommandozeilenparameter starten

xlsm mit Kommandozeilenparameter starten
21.02.2022 15:47:32
Heinzs
Hallo Excelprofis,
mit einer bat Datei rufe ich eine Exceltabelle auf:
call "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE" /e/autorun "c:\test\test.xlsm"
Anmerkung:
/Autorun muß ich als Parameter auslesen können; untre 32 bit geschah dieses wie folgt:
Private Declare PtrSafe Function GetCommandLine Lib "kernel32.dll" Alias "GetCommandLineA" () As Long
Private Declare PtrSafe Function lstrlen Lib "kernel32.dll" Alias "lstrlenA" ( _
ByVal lpString As Any) As Long
Private Declare PtrSafe Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
ByRef pDst As Any, _
ByRef pSrc As Any, _
ByVal ByteLen As Long)
Private Sub Workbook_Open()
Dim strCmdLine As String, strArguments() As String
Dim lngArgumentsCount As Long, lngIndex As Long
Dim lngReturn As Long, lngLength As Long
lngReturn = GetCommandLine
lngLength = lstrlen(lngReturn)
If CBool(lngLength) Then
strCmdLine = Space$(lngLength)
Call CopyMemory(ByVal strCmdLine, ByVal lngReturn, lngLength)
End If
gn_cmdline = Left$(strCmdLine, InStr(strCmdLine & vbNullChar, vbNullChar) - 1)
If InStr(gn_cmdline, "/autorun") > 0 Then
gn_cmdline = "autorun"
Call start
endif
Irgendwie wird gn_cmdline nicht mehr korrekt gefüllt (Zusammenhang mit 64 bit?). Variable ist als public definiert.
Frage: hat jemand eine Idee?
Danke für Hilfe!
MfG
Heinz
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: xlsm mit Kommandozeilenparameter starten
21.02.2022 16:17:51
Yal
Hallo Heinz,
Du könntest zuerst deine Zieldatei in einer Variable legen, und diese in Excel lesen
im bat:

set aktExcelDatei="c:\test\test.xlsm"
call "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE" /e/autorun %aktExcelDatei%
in Excel:

Sub test()
Debug.Print Environ("aktExcelDatei")
End Sub
(ungetestet)
VG
Yal
Anzeige
AW: xlsm mit Kommandozeilenparameter starten
21.02.2022 16:37:32
Heinzs
Hallo Yal,
danke für Deine Message. Damit erhalte ich den Pad und den Dateinamen, also "c:\test\test.xlsm" ich benötige jedoch den davor stehenden Parameter: /autorun
Hast Du vielleicht noch eine Idee?
Danke für Hilfe!
MfG
Heinz
AW: xlsm mit Kommandozeilenparameter starten
21.02.2022 16:49:33
Anton
Hallo Heinz,
probier's hiermit:

Sub b()
Dim objWMIService As Object, objItem As Object, gn_cmdline As String
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
For Each objItem In objWMIService.ExecQuery("Select * from Win32_Process where name='excel.exe'")
If InStr(objItem.CommandLine, "/autorun") > 0 Then
Debug.Print objItem.CommandLine
gn_cmdline = "autorun"
'Call Start
End If
Next
End Sub
mfg Anton
Anzeige
AW: xlsm mit Kommandozeilenparameter starten
21.02.2022 17:52:01
Nepumuk
Hallo Heinz,
korrigiere die Funktionen so:

Private Declare PtrSafe Function GetCommandLineA Lib "kernel32.dll" () As LongLong
Private Declare PtrSafe Function lstrlenA Lib "kernel32.dll" ( _
ByVal lpString As LongLong) As Long
Private Declare PtrSafe Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
ByRef Destination As Any, _
ByRef Source As Any, _
ByVal Length As LongPtr)
Gruß
Nepumuk
Anzeige
AW: xlsm mit Kommandozeilenparameter starten
22.02.2022 12:06:43
Heinzs
Hallo,
vielen Dank für Eure Hilfe; ich habe die Lösung von Nepumuk umgesetzt; funktioniert super!
MfG
Heinz
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige