0
我有一个Excel宏以下列方式传递时所接受的命令行参数的参数:防止CMD启动命令,打开包含空格的文件
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”。
有没有办法来防止这些错误出现,同时保留传递参数相同的语法和逻辑?
感谢您的回答。当按照您的建议使用引号时,参数不会发送到宏。我已将宏代码添加到问题中。 – Bobby