Рабочая книга Excel не будет открыта до тех пор, пока код VBA не будет запущен

Проблема: рабочая книга не открывается, пока код не закончит работу.

Подробности. У меня есть цикл, который требует от пользователя открыть другой файл, чтобы код продолжался. Этот файл необходимо загрузить из Интернета и открыть. Если файл не открыт, появляется msgbox с просьбой открыть файл. Несмотря на то, что я загружаю файл и открываю его, он не будет открыт, пока не будет выполнен весь другой код.

Мои мысли: Может быть, есть что-то вроде «Обновить», которое обновляет текущее состояние. Вероятно, я должен добавить что-то к существующему коду ниже, который обновляет рабочие книги excel и видит, произошло ли что-то еще.

Код ниже: (Код в порядке и работает для того, что мне нужно, проблема в том, что книга не откроется, пока не будет завершен весь другой код):

Private Function WorkbookActive() As Boolean ' Loop until the correct workbook is open Do Until WorkbookActive = True On Error Resume Next If Workbooks("Rapport.csv") Is Nothing Then If MsgBox("[Rapport.csv] - Workbook is currently not open." & vbNewLine & "Please download and open [Rapports.csv] and press OK", vbOKCancel, "Workbook not open") = vbCancel Then Exit Do WorkbookActive = False ElseIf Not Workbooks("Rapport.csv") Is Nothing Then WorkbookActive = True End If Loop End Function 

Все, что вам нужно, – сделать ваш цикл «косвенным», используя Application.Ontime . Перепишите это так:

 Sub IndirectLoop() On Error Resume Next Workbooks("Rapport.csv").Activate If Err.Number = 0 Then Exit Sub ' Done! If MsgBox("[Rapport.csv] - Workbook is currently not open." & vbNewLine & _ "Please download and open [Rapports.csv] and press OK", _ vbOKCancel, "Workbook not open") = vbCancel Then _ Exit Sub ' loop cancelled by user ' Pause VBA and reschedule the routine for 3 seconds later ' Control passes here from VBA to excel to open the file by the user' Application.OnTime Now + TimeSerial(0, 0, 3), "IndirectLoop" End Sub 

Идея заключается в том, что вместо цикла в вашей процедуре VBA (которая блокирует Excel) перепланируйте процедуру, используя Application.Ontime . Этот метод передаст управление из VBA в Excel в течение некоторого момента (например, 3 секунды в коде выше), позволяя ему выполнять некоторую активность, то есть открыть файл, который вы ожидаете.

Interesting Posts

Извлечение только чисел из ячейки таблицы Word в ячейку Excel

Excel Сортировка по второму символу в алфавитно-цифровой строке

Может ли PowerShell генерировать простой файл Excel с несколькими листами?

Функция соответствия не работает на 2 одинаковых номера

Как узнать, сколько уникальных значений связано со словом в excel

Удалить активный столбец из диапазона в формуле с помощью Excel

Excel: подсчет различных значений в столбце с использованием критериев из других столбцов

Формат изображения с заполнением и линией с использованием apache poi в Java

Как скрыть штамп времени и автора

Как я могу напечатать список наборов в файле с помощью python в формате, который легко помещается в excel, исключая все нежелательные символы?

SpreadsheetDocument OpenXML-декодирование кодированного текста в файле excel

Макрос для добавления строк в каждую строку

Петля через сетку в Листе 1, ссылка обратной ячейки с формулой в столбце на листе 2

Отменить выбор после автофильтра

Изменение цвета диапазона ячеек на основе значения одной ячейки

Давайте будем гением компьютера.