AW: Kommandozeile aus Excelaufruf in Makro auswerten
20.10.2010 18:12:03
Nepumuk
Hallo,
na einfach so:
Option Explicit
Private Declare Function GetCommandLine Lib "kernel32.dll" Alias "GetCommandLineA" () As Long
Private Declare Function lstrlen Lib "kernel32.dll" Alias "lstrlenA" ( _
ByVal lpString As Any) As Long
Private Declare 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
strCmdLine = Left$(strCmdLine, InStr(strCmdLine & vbNullChar, vbNullChar) - 1)
If Cbool(InStr(strCmdLine, "/e")) Then
If Len(strCmdLine) - InStr(strCmdLine, "/e") > 1 Then
strCmdLine = Mid$(strCmdLine, InStr(strCmdLine, "/e") + 2)
strCmdLine = Left$(strCmdLine, InStr(strCmdLine, " ") - 1)
strCmdLine = Trim$(strCmdLine)
Do While strCmdLine <> vbNullString
strCmdLine = Mid$(strCmdLine, 2)
Redim Preserve strArguments(lngArgumentsCount)
If Cbool(InStr(strCmdLine, "/")) Then
strArguments(lngArgumentsCount) = _
Left$(strCmdLine, InStr(strCmdLine, "/") - 1)
Else
strArguments(lngArgumentsCount) = strCmdLine
End If
strCmdLine = Right$(strCmdLine, Len(strCmdLine) - _
Len(strArguments(lngArgumentsCount)))
lngArgumentsCount = lngArgumentsCount + 1
Loop
If Cbool(lngArgumentsCount) Then
For lngIndex = 0 To lngArgumentsCount - 1
MsgBox strArguments(lngIndex)
Next
End If
End If
End If
End Sub
Der Aufruf muss so erfolgen:
"C:\Programme\Microsoft Office\OFFICE12\EXCEL.EXE" /e/Test "D:\Mappe2.xlsm"
So kannst du auch mehrere Parameter übergeben (obige Prozedur zerlegt dir diese wieder in einzelne Werte):
"C:\Programme\Microsoft Office\OFFICE12\EXCEL.EXE" /e/Test1/Test2/Test3 "D:\Mappe2.xlsm"
Gruß
Nepumuk