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