Zurück zur Homepage

Befehlszeile

Es ist ohne weiteres möglich, die Befehlszeile auszulesen, mit der Excel gestartet wurde. Somit kann man auch eigene Startparameter, wie ein Passwort übergeben. Der eigene Parameter sollte hinter /e/ stehen, wie hier "Hallo" : excel c:\Commandline.xls /e/Hallo

Beispieldatei commandline.zip 10 kB

 Private Declare Function GetCommandLine& Lib "kernel32" _
  Alias "GetCommandLineA" ()

Private Declare Function lstrlen Lib "kernel32" ( _
  ByVal str As Long) As Long

Private Declare Function lstrcpy Lib "kernel32" ( _
  ByVal dest As String, _
  ByVal src As Long) As Long

Public Sub Workbook_Open()
  Dim Meldung As String, dummy As String
  Meldung = "Der Text in der Kommandozeile beim öffnen," & vbCrLf
  Meldung = Meldung & "der hinter /e/ steht, wird durch die Prozedur" & vbCrLf
  Meldung = Meldung & "Workbook_Open in ""DieseArbeitsmappe"" gelesen und" & vbCrLf
  Meldung = Meldung & "an dieser Stelle ausgegeben." & vbCrLf
  Meldung = Meldung & "Beispiel für die Kommandozeile:" & vbCrLf
  Meldung = Meldung & "excel c:\Commandline.xls /e/Hallo" & vbCrLf & vbCrLf
  dummy = StringVonPointer(GetCommandLine())
  If InStr(1, LCase(dummy), "/e/") Then
    'Text hinter "/e/"
    dummy = Right$(dummy, Len(dummy) - 2 - InStr(1, LCase(dummy), "/e/"))
  Else
    Meldung = Meldung & "Hier gesamte Befehlszeile, da /e/ fehlt:" & vbCrLf & vbCrLf
  End If
  MsgBox Meldung & dummy, vbOKOnly, "Befehlszeile"
End Sub

Private Function StringVonPointer(plngAscii As Long) As String
  Dim lngAnzahl&, strName$
  lngAnzahl = lstrlen(plngAscii)
  strName = String(lngAnzahl, 0)
  lstrcpy strName, plngAscii
  If InStr(1, strName, Chr(0)) <> 0 Then
    strName = Left$(strName, InStr(1, strName, Chr(0)) - 1)
  End If
  StringVonPointer = strName
End Function