2015-06-19 2 views
0

Я делаю макрос, который я хочу сделать следующие вещи:исполнение Pause код, но пусть Excel работать

  1. Открыть файл.

  2. Подождите, пока файл заполняется данными (этот файл использует те же формулы для загрузки данных из внешних баз данных, загрузка занимает около 15 секунд)

  3. Через 20 секунд проверьте, все загружается, если нет, то ждать дальше 10 секунд (общее ожидание до минуты).
  4. Если все загружено, архивируйте и закройте файл.

У меня есть проблема останавливает выполнение кода в течение некоторого времени, позволяя формулу обновить себя в то же время - я попытался Application.Wait после прочтения на MSDN, что:

Метод Wait приостанавливает все Microsoft Excel и может помешать вам выполнять другие операции на вашем компьютере, пока действует «Ожидание». Однако фоновые процессы, такие как печать и перерасчет продолжают «

, но это не сработало. - Подождите, остановилась как код и загрузку данных Есть ли способ, чтобы остановить код на некоторое время, но пусть все остальные. Работа Excel продолжается? Я бы хотел, чтобы макрос мог работать полностью без присмотра, так как это возможно, что его нужно будет запустить посреди ночи.

Редактировать: попробовал ответ Сиддарта, и он не работает для меня Код, который я пробовал:

Sub processfile() 

    Dim bbgwb As Workbook 
    Dim filepath As String 

    filepath = "C:\Test\0900CET.xls" 
    Set bbgwb = Workbooks.Open(filepath) 

    Wait 60 

    filepath = "C:\Test\Archive\" 
    If Len(Dir(filepath)) = 0 Then 
     MkDir filepath 
    Else 
     'Do nothing. 
    End If 

    filepath = "C:\Test\Archive\0900.xls" 

    bbgwb.Worksheets(1).Range("A1:AZ200").Copy 
    bbgwb.Worksheets(1).Range("A1:AZ200").PasteSpecial xlPasteValuesAndNumberFormats 
    bbgwb.Worksheets(1).Range("C142").Value = Now 

    bbgwb.SaveAs Filename:=filepath, FileFormat:=56 
    bbgwb.Close 
    ThisWorkbook.Close 

End Sub 

Private Sub Wait(ByVal nSec As Long) 
    nSec = nSec + Timer 
    While nSec > Timer 
     DoEvents 
    Wend 
End Sub 

0900CET.xls имеет формулы w hich, после его открытия, autoupdate с данными (которые я хочу затем хранить и архивировать, поэтому я добавляю в конце специальную часть для копирования/вставки). Я просто проверял открытие 0900CET.xls вручную (все формулы обновляются после 17.3 секунд) и с помощью упомянутой выше (не одну ячейки коды обновляется, прежде чем файл был в архив.

+0

Ожидание нескольких секунд без приостановки работы Excel Попробуйте [это решение] (http://stackoverflow.com/a/17467691/2143262) –

ответ

1

Я обычно использую этот подпункт, который я создал для себя моего

+0

Рассмотрите возможность использования ** Теперь **, поскольку ** Таймер ** может обмануть вас, если вы cross1200 –

+0

К сожалению, этот ответ не работает для меня, я отредактировал вопрос, чтобы добавить результаты тестирования, включая код, который у меня есть на данный момент. –

+0

Это потому, что вы открываете файл в том же экземпляре Excel. время, когда файл не открывается, остальная часть кода не будет запущена. –

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