簡體   English   中英

編譯錯誤:預期列表分隔符或) excel VBA

[英]Compile error: expected list separator or ) excel VBA

我在 VBA 中有這個命令行:

Call Shell("cmd.exe /S /k " & ""C:\Program Files\Java\jre1.8.0_171\bin\javaw.exe" -jar " & DPath & "  """ & inp1 & """ """ & inp2 & """ """ & sPath & """ """ & FilePath & """", vbNormalFocus)

當我刪除引號時,錯誤出現在 VBA 中:

 'C:\Program' is not recognized as an internal or external command, operable program or batch file.

當我添加引號時,錯誤出現在 VBA 中:

 Compile error: expected list separator or )

我該如何解決這個錯誤?

引用錯誤,必須在javaw.exe路徑周圍加上另一對引號,因為在 VBA 中,必須將文字"指定為""

Call Shell("cmd.exe /S /K " & """C:\Program Files\Java\jre1.8.0_171\bin\javaw.exe"" -jar " & DPath & "  """ & inp1 & """ """ & inp2 & """ """ & sPath & """ """ & FilePath & """", vbNormalFocus)

但這仍然行不通,因為cmd刪除了最外層的引號並留下了無效的命令行。 因此,您必須在/K后面的整個表達式周圍提供另一對(文字)引號,這可能會被cmd刪除:

Call Shell("cmd.exe /S /K " & """""C:\Program Files\Java\jre1.8.0_171\bin\javaw.exe"" -jar " & DPath & "  """ & inp1 & """ """ & inp2 & """ """ & sPath & """ """ & FilePath & """""", vbNormalFocus)

最后,我建議也將DPath值包含在(文字)引號內:

Call Shell("cmd.exe /S /K " & """""C:\Program Files\Java\jre1.8.0_171\bin\javaw.exe"" -jar """ & DPath & """ """ & inp1 & """ """ & inp2 & """ """ & sPath & """ """ & FilePath & """""", vbNormalFocus)

請學習如何讓您的生活變得輕松。 僅僅因為您可以使用 """ 在 VBA 字符串中表示一個 ",並不意味着您應該在最微不足道的情況下除外。

這是一種讓生活更簡單的原生 VBA 方法。

Dim qDPath As String
Dim qinp1 As String
Dim qinp2 As String
Dim qsPath As String
Dim qFilePath As String
Dim qCommand As String

qDPath = MakeQuotedString(Path)
qinp1 = MakeQuotedString(inp1)
qinp2 = MakeQuotedString(inp2)
qsPath = MakeQuotedString(sPath)
qFilePath = MakeQuotedString(FilePath)

qCommand = MakeQuotedString("C:\Program Files\Java\jre1.8.0_171\bin\javaw.exe")
qCommand = MakeQuotedString("cmd.exe /S /k " & qCommand & "-Jar " & qDPath & qinp1 & qinp2 & qsPath & qFilePath)

Call Shell(qCommand, vbNormalFocus)

雖然上述內容更加冗長,但至少允許您通過 F8 使用單步執行來檢查每個階段是否正確構建了最終命令字符串。

如您所見,上面有點冗長,這就是為什么許多其他編程語言能夠在字符串中嵌入變量和格式標記的原因。 這也可以在 VBA 中使用模塊隱藏相關代碼來完成。 請查看我的 VBA 布局模塊中的 Fmt 方法。 它可以從這里獲得 GitHub 。 它是一個非常簡單的庫模塊,允許在字符串中嵌入變量字段和格式化標記

這將允許您編寫

Call Shell("cmd.exe /S /k " & ""C:\Program Files\Java\jre1.8.0_171\bin\javaw.exe" -jar " & DPath & "  """ & inp1 & """ """ & inp2 & """ """ & sPath & """ """ & FilePath & """", vbNormalFocus)

以更簡潔的方式,這對人眼也很友好。

Dim ShellCmd as String
ShellCmd = Fmt("cmd.exe /S /k {dq}{dq}C:\Program Files\Java\jre1.8.0_171\bin\javaw.exe{dq} -jar {dq}{0}{dq}  {dq}{1}{dq} {dq}{2}{dq} {dq}{3}{dq} {dq}{4}{dq}{dq}", dpath, inp1, inp2, sPath, FilePath)

Call Shell(ShellCmd, vbNormalFocus)

如果我仍然設法讓 {dq} 不匹配,請提前道歉。

Call Shell("cmd.exe /S /k ""C:\Program Files\Java\jre1.8.0_171\bin\javaw.exe"" -jar " & _
           DPath & "  """ & inp1 & """ """ & inp2 & """ """ & sPath & """ """ & _
            FilePath & """ ", vbNormalFocus)

...取決於您的連接變量的各種值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM