我有一个在Excel中运行VBA宏的VBS脚本。当我在Excel文件中手动运行宏时,宏工作,但是当从VBS调用它时,它不会在运行查询之前删除现有数据。
这是我处理Excel的VBS脚本:
Dim xlApp, xlBook
Set xlApp = CreateObject("Excel.Application")
xlApp.DisplayAlerts = False
Set xlBook = xlApp.Workbooks.Open("Y:\Public\Eoin\Complaints Report\Complaints Report.xlsm", False)
msgbox("3")
xlApp.Run "Complaints_Report.Complaints_Report()"
WScript.Sleep 100000
xlbook.Save
xlBook.Close False
set xlBook = Nothing
xlApp.Quit
Set xlApp = Nothing
这是存储在模块中的Excel VBA宏:
Sub Complaints_Report()
Sheets("Complaints Report").Activate
'Clear out old detail
Range("A2:Z10000").Clear
'Declare variables'
Set objMyConn = New ADODB.Connection
Set objMyRecordset = New ADODB.Recordset
Dim strSQL As String
'Open Connection'
objMyConn.ConnectionString = "Driver={Microsoft ODBC for Oracle}; " & _
"CONNECTSTRING=(DESCRIPTION=" & _
"(ADDRESS=(PROTOCOL=***)" & _
"(HOST=*****)(PORT=****))" & _
"(CONNECT_DATA=(SERVICE_NAME =*****))); uid=******; pwd=*****;"
objMyConn.Open
'Set and Excecute SQL Command'
strSQL = "Select distinct * From Temp_Final_Complaints_Report"
'Open Recordset'
Set objMyRecordset.ActiveConnection = objMyConn
objMyRecordset.Open strSQL
'Copy Data to Excel'
Sheets("Complaints Report").Range("A2").CopyFromRecordset (objMyRecordset)
End Sub
宏返回结果,但不会事先删除工作表中的所有内容。
答案 0 :(得分:1)
两件事:
Run
方法需要运行Sub
的名称,因此不应该有括号:
变化:
xlApp.Run "Complaints_Report.Complaints_Report()"
要:
xlApp.Run "Complaints_Report.Complaints_Report"
确保在使用Range
时明确指定工作表,因为工作表的激活可能不可靠
变化:
Range("A2:Z10000").Clear
要:
Sheets("Complaints Report").Range("A2:Z10000").Clear
您甚至可以删除该语句以激活工作表,因为代码将在没有它的情况下完成工作。