Excel Übergabeparameter
#1
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!
Top
#2
Hola,

verlinkst du bitte deine Fragen in den verschiedenen Foren gegenseitig?
Danke.

Gruß,
steve1da
Top
#3
Hallöchen,

ich würde vorschlagen, Du postest auch noch die zugehörigen 3 API Smile
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)
Top
#4
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 StringByVal 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 StringByVal Src As Long) As Long

Public Function ShowCommandline() As String
    Dim CmdPtr 
As Long
    Dim Cmd 
As String

    CmdPtr 
GetCommandLine

    Cmd 
String$(lstrlen(CmdPtr) + 1vbNullChar)
    CopyPtrToStr CmdCmdPtr

    Cmd 
Left$(CmdInStr(CmdvbNullChar) - 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 AnySrc As AnyByVal 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.  Big Grin
Top
#5
Hola,

Leute, schon wieder zu langsam....

http://www.herber.de/forum/messages/1666582.html

Gruß,
steve1da
Top
#6
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.
Top
#7
Sorry, ich habe von hier keinerlei Email-Benachrichtigung über Antworten erhalten. Vielleicht sind sie dem Spamfilter zum Opfer gefallen.

Wurde mittlerweile gelöst. Danke
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste