2014-02-05 28 views
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”。

有没有办法来防止这些错误出现,同时保留传递参数相同的语法和逻辑?

回答

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提供没有说明的参数是什么)。

+0

感谢您的回答。当按照您的建议使用引号时,参数不会发送到宏。我已将宏代码添加到问题中。 – Bobby