VBScript для Excel "objWorkbook.RefreshAll" не обновляет данные - PullRequest
0 голосов
/ 25 января 2019

У меня есть книга Excel, которая использует запрос мощности для извлечения данных из другой книги.Когда я открываю книгу вручную, она обновляется автоматически, но когда я вызываю ее из VBScript (что некоторые из вас недавно помогли мне найти другую книгу), она не обновляется.

Я использую тот же код, который некоторые из вас помогли мне на днях в другой книге, но для этого он не работает.Я также попытался поместить макрос autoexec в мою книгу, а также попробовал некоторый код VBA в книге, который обновляет данные.Они оба работают, когда я открываю книгу вручную, но ни одна не обновляет книгу, когда я открываю ее из VBScript.Я также попытался вызвать макрос из VBScript, но это тоже не сработало.Вот мой код:

Dim s
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = 
objExcel.Workbooks.Open("\\FilePath\Daily Snapshot.xlsm")

s = objExcel.ActiveWorkbook.BuiltinDocumentProperties("Last Save Time")

objExcel.Application.Visible = True
objExcel.DisplayAlerts = False
objExcel.AlertBeforeOverwriting = False
objWorkbook.WorkSheets(1).Activate
objWorkbook.RefreshAll 

objExcel.ActiveWorkbook.Save
Do Until objExcel.ActiveWorkbook.BuiltinDocumentProperties("Last Save 
Time") > s
Loop
'objExcel.ActiveWorkbook.Close   

Я также пытался использовать DoEvents (который мне говорили ранее, что он не нужен), но странно то, что когда я включаю DoEvents - я получаю сообщение об ошибке VBScript об этом, но когда выскакивает сообщение об ошибке - тогда мои данные обновляются, пока сообщение об ошибке отображается на экране, но тогда, конечно, остальная часть сценария не завершается (какие части сохранения и закрытия)?Мне кажется, что, возможно, коду нужен какой-то перерыв, чтобы он мог выполнить обновление, но я понимаю, что именно в этом заключается разница между «Last Save Time» и текущим временем сохранения.Кажется, что происходит сбой в части RefreshAll (не только потому, что она не обновляется, но и не сохраняет мою книгу, которая является следующей частью после RefreshAll).Однако, если я не закомментирую часть ActiveWorkbook.Close - она ​​закроет книгу.Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Это то, что я понял, что нужно было сделать, чтобы это работало должным образом.Мне нужно было отредактировать свойства запроса (подключения) в Excel - я отменил выбор всего в области «Обновить контроль» (отмените выбор «Обновить при открытии» и отмените выбор «Включить фоновое обновление» и все остальные, кроме «Обновить это соединение при обновлении всех»).мой исходный код, который я опубликовал ранее, теперь работает как положено.

0 голосов
/ 25 января 2019

Помогает ли параметр updateLinks команды open?

Workbooks.Open Filename:="\\FilePath\Daily Snapshot.xlsm", updatelinks:=1

Или свойство приложения?

Application.UpdateLinks = True

'Variant 1:
Dim s
Set objExcel = CreateObject("Excel.Application")
objExcel.UpdateLinks = True
Set objWorkbook = 
objExcel.Workbooks.Open("\\FilePath\Daily Snapshot.xlsm")
..,


'Variant 2:
Dim s
Set objExcel = CreateObject("Excel.Application")
objExcel.Workbooks.Open FileName:="\\FilePath\Daily Snapshot.xlsm", UpdateLinks:=1

Set objWorkbook = objExcel.activeworkbook
...
...