2016-09-28 5 views
0

У меня есть сценарий VBS, который запускает макрос VBA в Excel. Макрос работает, когда я вручную запускаю его в файле Excel, но при вызове из VBS он не удаляет существующие данные перед запуском запросов.Как удалить ячейки Excel при запуске макроса из сценария VBs

Вот мой VBS скрипт работы с Excel:

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

две вещи:

  1. Метод Run нуждается имя Sub для запуска, так что не должно быть круглые скобки:

    Изменение:

    xlApp.Run "Complaints_Report.Complaints_Report()" 
    

    To:

    xlApp.Run "Complaints_Report.Complaints_Report" 
    
  2. Обязательно укажите простыню явно при использовании Range, как активация листа не может быть надежным

    Изменение:

    Range("A2:Z10000").Clear 
    

    To:

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

Вы может затем даже удалить инструкцию для активации листа, так как код выполнит свою работу без этого.

+0

Это все еще не выполняется. В настоящее время в моем файле excel у меня есть данные в строках 2:13, и я ввел некоторые фиктивные данные в ячейки в A21 и A33, чтобы убедиться, что макрос поймает, когда будет пустая строка. В настоящее время макрос будет запускать SQL-запросы и выводить их, пока не исчезнут фиктивные данные. –

+0

Даже прокомментируйте все бары «Листы» («Отчет о жалобах»). Активируйте «Очистить старые детали Таблицы (« Отчет о жалобах »). Диапазон (« A2: Z10000 »). Очистить ничего не делает –

+1

Просто заметили другую проблему при попытке имитируйте вашу настройку: скобки в VBScript должны быть опущены. См. Мой обновленный ответ. – trincot

Смежные вопросы