Registriert seit: 06.04.2017
Version(en): 2016
Hallo zusammen.
Ich nutze in einem Excel-File Übergabeparameter die von der Kommandozeile beim Aufruf der Datei übergeben werden.
Das klappt leider nur nicht, wenn bereits eine Datei geöffnet ist, da dann die Kommandozeile der bereits geöffneten Datei ausgelesen wird:
Public Function ShowCommandline() As String
Dim CmdPtr As Long
Dim Cmd As String
CmdPtr = GetCommandLine
Cmd = String$(lstrlen(CmdPtr) + 1, vbNullChar)
CopyPtrToStr Cmd, CmdPtr
Cmd = Left$(Cmd, InStr(Cmd, vbNullChar) - 1)
ShowCommandline = Trim(Cmd)
End Function
Hat jemand einen Tipp parat?
Vielen Dank!
Registriert seit: 16.04.2014
Version(en): xl2016/365
Hola,
verlinkst du bitte deine Fragen in den verschiedenen Foren gegenseitig?
Danke.
Gruß,
steve1da
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
ich würde vorschlagen, Du postest auch noch die zugehörigen 3 API
Ich vermute, dass damit die Kommandozeile beim Start von Excel ausgelesen wird.
Wenn Du die betreffende Datei in einer eigenen Excel-Session startest, sollte es klappen.
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 25.04.2016
Version(en): 2013
08.01.2019, 21:14
(Dieser Beitrag wurde zuletzt bearbeitet: 08.01.2019, 21:23 von Storax.)
Den Code hat der OP doch irgendwo kopiert. Er weiss wahrscheinlich gar nicht, was Du meinst. Aber hier die fehlenden APIs
PHP-Code:
Private Declare PtrSafe Function GetCommandLine Lib "kernel32" _
Alias "GetCommandLineA" () As LongPtr
Private Declare PtrSafe Function lstrcpy Lib "kernel32" _
Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As LongPtr) As Long
Private Declare PtrSafe Function lstrlen Lib "kernel32" _
Alias "lstrlenA" (ByVal lpString As LongPtr) As Long
Private Declare Function CopyPtrToStr Lib "kernel32" _
Alias "lstrcpyA" (ByVal Dst As String, ByVal Src As Long) As Long
Public Function ShowCommandline() As String
Dim CmdPtr As Long
Dim Cmd As String
CmdPtr = GetCommandLine
Cmd = String$(lstrlen(CmdPtr) + 1, vbNullChar)
CopyPtrToStr Cmd, CmdPtr
Cmd = Left$(Cmd, InStr(Cmd, vbNullChar) - 1)
ShowCommandline = Trim(Cmd)
End Function
Andere Möglichkeit
PHP-Code:
Private Declare PtrSafe Function w_commandline Lib "kernel32.dll" Alias "GetCommandLineW" () As LongPtr
Private Declare PtrSafe Function w_strlen Lib "kernel32.dll" Alias "lstrlenW" (ByVal lpString As LongPtr) As Long
Private Declare PtrSafe Sub w_memcpy Lib "kernel32.dll" Alias "RtlMoveMemory" (Dst As Any, Src As Any, ByVal size As LongPtr)
Public Function GetCommandLine() As String
GetCommandLine = String$(w_strlen(w_commandline()), 0)
w_memcpy ByVal StrPtr(GetCommandLine), ByVal w_commandline(), LenB(GetCommandLine)
End Function
Aber beide lesen die Parameter der aktuellen Instanz.
Und IMHO will der OP auch gar nicht die Parameter der Excel Instanz, sondern irgendetwas anderes, denn das ist Unsinn bzw. er hat nicht verstanden, was beim Doppelklick auf eine Excel Datei passiert
Zitat:Das klappt leider nur nicht, wenn bereits eine Datei geöffnet ist, da dann die Kommandozeile der bereits geöffneten Datei ausgelesen wird
PS Mir schwant da was :19: Da beim Doppelklick der Dateiname als Parameter übergeben wird, will der OP vielleicht den kompletten Dateinamen der aktuellen Datei herausfinden.
Registriert seit: 16.04.2014
Version(en): xl2016/365
Hola,
Leute, schon wieder zu langsam....
http://www.herber.de/forum/messages/1666582.htmlGruß,
steve1da
Registriert seit: 25.04.2016
Version(en): 2013
08.01.2019, 21:36
(Dieser Beitrag wurde zuletzt bearbeitet: 08.01.2019, 21:36 von Storax.)
Ah, gesehen, das Problem dürfte wesentlich einfacher zu lösen sein.
Wundert mich, dass nicht mal Nepumuk das gesehen hat, aber der OP rückt ja auch nur wenige Informationen heraus.
Registriert seit: 06.04.2017
Version(en): 2016
Sorry, ich habe von hier keinerlei Email-Benachrichtigung über Antworten erhalten. Vielleicht sind sie dem Spamfilter zum Opfer gefallen.
Wurde mittlerweile gelöst. Danke