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.