Всем привет!!!
Люди, у меня возникла маленькая проблемка, с корой я столкнулся, и не знаю, как бороться, как ее решить. Как я понял, данная проблема не имеет отношения к объекту QueryTables и имеет какое-то отношение к системе безопасности Excel, но, при этом, камнем преткновения становится именно объект QueryTables. Следите за моей мыслью…
Условимся, что в некоторой книге под названием WB_1.xls есть макрос SUB_1(), который использует для своей работы объект QueryTables. Вот его примерный код:
Sub SUB_1()
...
...
Dim Select_exp As String
Connection_BD = "ODBC;DSN=...;UID=...;PWD=..."
' ... – информация конфиденциальна
Select_exp = "select ... from ... where ... order ..."
With ActiveSheet.QueryTables.Add(Connection:=Connection_BD, Destination:=Range(Cells(col, 1), Cells(col, 1)))
.CommandText = Select_exp
.Name = "TR_range"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = False
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False ' вот здесь вся загвоздка
End With
...
...
End Sub
Теперь рассмотрим две ситуации:
1) Мы открываем книгу WB_1.xls и нажимаем Alt+F8. В появившемся окне мы выбираем наш макрос и нажимаем кнопку Run. При сценарии таких действий со стороны пользователя (т.е. меня), макрос успешно (молча) выполняется и извлекает данные из БД.
2)Мы пишем WSH сценарий следующего вида:
var objXL = WScript.CreateObject("Excel.Application");
objXL.Visible = true;
objXL.Workbooks.Open(path + " WB_1.xls");
var xxx = objXL.Run("WB_1.xls!SUB_1()");
objXL.Quit();
После запуска такого сценария запускается Excel и начинается выполнение макроса SUB_1(). Но как только выполнение макроса SUB_1() доходит до строки «.Refresh BackgroundQuery:=False» (выполнение изъятия данных из БД), так сразу же Excel выводит окно списка ODBC соединений с просьбой выбрать необходимое ODBC-соединение.
Вопрос: Как сделать так, чтобы во второй ситуации Excel молча выполнял макрос SUB_1() также, как это происходит в первой ситуации?? Почему в первой ситуации Excel замечательно, прямо-таки, работает, а во второй ситуации просит вмешаться пользователя??
Ответить
|