Shell命令excel vba

在Excel VBA中执行以下操作时遇到一些问题。 目标是运行一个.sql文件 – 问题是与我认为的Execute Shell子。

我运行:

 Sub RunFile() Call ExecuteShell("C:\","LAPBTN1749","filename.sql") End Sub Sub ExecuteShell(path As String, hostname As String, file As String) Dim retval retval = Shell("SQLCMD -E -S " & hostname & "\SQLEXPRESS -i " & path & file, vbMinimizedFocus) End Sub 

它不运行,可能是由于报价。 如果是引用,有人可以解释他们是如何工作的或告诉我在哪里可以find,因为我从来没有正确地理解这一点。

我同意@TimWilliams。 我更喜欢将Chr$(34)附加到一个string,因为这意味着我不必计算我正在使用的引号的数量。 代码如下所示:

 Sub RunFile() Call ExecuteShell("C:\", "LAPBTN1749", "filename.sql") End Sub Sub ExecuteShell(path As String, hostname As String, file As String) Dim retval retval = Shell("SQLCMD -E -S " & Chr$(34) & hostname & "\SQLEXPRESS" & Chr$(34) & " -i " _ & Chr$(34) & path & file & Chr$(34), vbMinimizedFocus) End Sub 

如果任何传递的参数包含空格,那么他们可能需要在对Shell的调用中引用。 VBA中的报价通过翻倍来逃脱:

 Sub RunFile() Call ExecuteShell("C:\","LAPBTN1749","filename.sql") End Sub Sub ExecuteShell(path As String, hostname As String, file As String) Dim retval retval = Shell("SQLCMD -E -S """ & hostname & "\SQLEXPRESS"" -i """ & _ path & file & """", vbMinimizedFocus) End Sub 

如果仍有问题,请尝试Debug.Print ,并在命令提示符处“手动”运行第一个Shell参数。