Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница:

 

  Вопрос: _Внезапная трабла QueryTables Добавлено: 25.04.06 15:12  

Автор вопроса:  SergeIK
Всем привет!!!

Люди, у меня возникла маленькая проблемка, с корой я столкнулся, и не знаю, как бороться, как ее решить. Как я понял, данная проблема не имеет отношения к объекту 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 замечательно, прямо-таки, работает, а во второй ситуации просит вмешаться пользователя??

Ответить

  Ответы Всего ответов: 0  

Нет ответов

Страница:

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам