我有一个Excel宏,它在以下列方式传递时接受命令行参数:
start excel.exe c:\cmdr.xlsm -param1 -param2 -param3
宏
Sub Auto_Open()
Debug.Assert False
Dim parameters As Variant
Dim i As Integer
parameters = CmdLineToVariant
For i = 1 To UBound(parameters)
MsgBox ("Your parameter " & i & " was " & parameters(i))
Next i
End Sub
Public Function CmdLineToVariant() As Variant
Dim Buffer() As Byte
Dim StrLen As Long
Dim CmdPtr As Long
Dim line As String
Dim lineSplitted As Variant
Dim parameters As String
Dim i As Integer
CmdPtr = GetCommandLine()
If CmdPtr > 0 Then
StrLen = lstrlenW(CmdPtr) * 2
If StrLen > 0 Then
ReDim Buffer(0 To (StrLen - 1)) As Byte
CopyMemory Buffer(0), ByVal CmdPtr, StrLen
line = Buffer
lineSplitted = Split(line, "-")
CmdLineToVariant = lineSplitted
End If
End If
End Function
当参数名称中没有空格时它工作正常,但是当有像这样的空格时我会遇到一些烦人的错误
start excel.exe c:\cmdr.xlsm -param 1 -param 2 -param 3
我的宏成功完成后,出现“1.xlsx无法找到”,“无法找到2.xlsx”等错误,最后“找不到3.xlsx”。
有没有办法防止出现这些错误,同时保留传递参数的相同语法和逻辑?
答案 0 :(得分:1)
通常,"quote parameters"
。
start
有一个怪癖,但第一个"quoted argument"
被用作窗口标题。
使用
start "" excel.exe c:\cmdr.xlsm "-param 1" "-param 2" "-param 3"
或可能
start "" excel.exe c:\cmdr.xlsm -"param 1" -"param 2" -"param 3"
(未经测试 - OP未提供参数是什么)。