如何从VBs脚本运行宏时删除Excel单元格

时间:2016-09-28 08:58:45

标签: excel vba excel-vba vbscript

我有一个在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

宏返回结果,但不会事先删除工作表中的所有内容。

1 个答案:

答案 0 :(得分:1)

两件事:

  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
    
  3. 您甚至可以删除该语句以激活工作表,因为代码将在没有它的情况下完成工作。