2014-02-05 58 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