如何从VB脚本运行macros时删除Excel单元格

我有一个在Excel中运行VBAmacros的VBS脚本。 当我在Excel文件中手动运行它时,该macros将起作用,但是当从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 VBAmacros存储在模块中:

 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 

该macros返回结果,但不预先删除表中的所有内容。

两件事情:

  1. Run方法需要Sub的名字来运行,所以不应该有括号:

    更改:

     xlApp.Run "Complaints_Report.Complaints_Report()" 

    至:

     xlApp.Run "Complaints_Report.Complaints_Report" 
  2. 确保在使用Range时明确指定工作表,因为工作表的激活可能不可靠

    更改:

     Range("A2:Z10000").Clear 

    至:

     Sheets("Complaints Report").Range("A2:Z10000").Clear 

你甚至可以删除声明来激活工作表,因为代码将没有这个工作。