简体   繁体   中英

Shell command excel vba

I'm having some problems executing the following in Excel VBA. The goal is to run an .sql file - the issue is with the Execute Shell sub I think.

I run:

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

It doesn't run, probably due to the quotes. If it is the quote, can someone explain how they work or tell me where I can find out because I've never properly understood this.

If any of the passed parameters contain spaces then likely they need to be quoted in the call to Shell. Quotes in VBA are escaped by doubling them up:

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

If you're still having problems then try Debug.Print ing the first Shell argument and running it "manually" at the command prompt.

I agree with @TimWilliams. I prefer to append Chr$(34) to a string because it means I don't have to count the number of quotes that I'm using. The code looks like:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM