Используя Excel VBA, как сохранить исходный код после события «thisworkbook.close» во второй книге?

В Excel 2007 у меня есть лист со списком других документов Excel, каждый из которых имеет свой собственный VBA. Мой код открывает первую книгу в списке, позволяет запускать vba, а затем, когда она завершена, помечает ее как завершенную и открывает следующую книгу в списке.

Все это прекрасно работает, если я не позволю одному из других workboks закрыться «thisworkbook.close». Это останавливает запуск VBA в исходной книге, а также сам. Если я прокомментирую эту строку, все это сработает, но я предпочел бы сохранить только одну рабочую книгу и одну вспомогательную книгу одновременно.

Кроме того, в этом случае нецелесообразно переместить все VBA в основную книгу.

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

Код рабочей книги:

Sub RunReports() Dim wkb1 As Workbook Dim wks1 As Worksheet Dim lngR As Long Dim strReport As String Set wkb1 = ThisWorkbook Set wks1 = wkb1.Sheets(strDay) For lngR = 4 To 1048576 strReport = wks1.Cells(lngR, 1).Value 'open the report. Its own VBA will take care of everything else Workbooks.Open strReport 'mark the report as complete wks1.Cells(lngR, 2).Value = "done" Next lngR End Sub 

код в листах, которые открыты:

 Private Sub Workbook_Open() ThisWorkbook.Sheets("Sheet1").Cells(1, 1).Value = Now() ThisWorkbook.Save Application.Wait (Now() + TimeValue("00:00:05")) ThisWorkbook.Close End Sub 

Если я прокомментирую «thisworkbook.close», он откроет их все, обновит время их открытия и сохранит их. Если нет, он делает все до первого «thisworkbook.close», закрывает первую вспомогательную книгу и останавливает все выполнение VBA.

Есть ли у кого-нибудь идеи, как сохранить код vba «мастера» рабочей книги после завершения кода «суб» книги, когда код книги «sub» содержит «thisworkbook.close» (отредактирован, чтобы сделать вопрос понятным)

Используйте стандартные COM-способы выполнения действий. Возьмите ссылку на каждую книгу (не excel.application) с помощью GetObject(filename) . Сделайте то, что вы хотите, затем не закрывайте его в подзаголовке, но не устанавливайте ссылку на ничего в своем хозяине (это происходит, когда вы set exceldoc = nothing или достигаете End Function/Sub ). Не делайте так, как это программирование вуду.

Interesting Posts

Использование Macro-Recorder в Excel

Как я могу сортировать данные в сводной таблице excel с помощью powershell?

EXCEL VBA – таблица с гиперссылкой или сводной таблицей?

Telerik Kendo grid-export to excel не отвечает при попытке экспортировать более 4000 записей для Excel

Функция сопоставления Excel с инструкциями IF и OR

пытаясь экспортировать скрипт pl / sql exctract в файл excel, который в настоящее время извлекает данные и помещает их в текстовый файл

Не удается получить текст с узла в XML

Excel – Извлечение списков для счетов с использованием Slicers и Pivottables

Сумма столбца X на основе значения в столбце Y, не находящегося в массиве Z

Ruby Axlsx, как добавить строку с объединенными ячейками

Как открыть файл с помощью Excel VBA и отключить обновление ссылок

VBA Excel: значение типа в теге <input> (с использованием атрибута Id)

Excel-VBA передает неверные значения даты из SAS в Excel-лист

сравнить два столбца данных с помощью ключа в отдельной таблице

VBA Посмотреть список

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