Как установить задержку в VB Script, чтобы данные Excel обновили

У меня есть файл Excel, который автоматически загружает данные из внешней базы данных (через базу данных "Подключение к базе данных", которая, в свою очередь, связана с таблицей Sharepoint). Мне нужно автоматизировать процесс:

  • открытие файла Excel
  • ожидание обновления данных
  • запуск макроса (в этом файле)
  • закрытие файла

script, который у меня есть:

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("excel spreadsheet.xlsm")
WScript.Sleep 1000 * 60 * 5
objExcel.Run "macro_name"
objWorkbook.close False
objExcel.Application.Quit

Однако независимо от того, какую задержку я установил в WScript.sleep, он не обновляет данные; вместо этого он запускает макрос по данным, уже находящимся в электронной таблице. Может ли кто-нибудь помочь, пожалуйста!


РЕШЕНИЕ

В конце (и с пользой для тестирования на несколько дней), кажется, наиболее чистые и эффективные:

  • Удаление "WScript.Sleep 1000 * 60 * 5" из VB script вообще
  • В Excel сброс флажка "Включить обновление фона" в свойствах для каждого подключения.
  • Добавление следующей макроса перед макросом

    ActiveWorkbook.RefreshAll

Большое спасибо Филиппу и Сантошу за ответы ниже, указывающие на меня в правильном направлении!

+3
источник поделиться
2 ответа

в вашей книге вам нужно обновить данные в QueryTables, прежде чем запускать код.

Почему бы не вызвать метод Обновить в таблице запросов в начале макроса excel vba?

0
источник

Для Excel-VBA вы можете использовать любой из приведенных ниже способов для приостановки кода.

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

ИЛИ

Private Sub delay(seconds As Long)
    Dim endTime As Date
    endTime = DateAdd("s", seconds, Now())
    Do While Now() < endTime
        DoEvents
    Loop
End Sub

или

Application.Wait (Now() + TimeSerial(0, 0, 5))

<ч/" > образец кода (будет приостановлено на 10 секунд)

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("excel spreadsheet.xlsm")
objExcel.Wait (Now + TimeSerial(0, 0,10))
objExcel.Run "macro_name"
objWorkbook.close False
objExcel.Application.Quit
+3
источник

Посмотрите другие вопросы по меткам или Задайте вопрос