Я возился с этим часами и не могу понять. У меня есть основная рабочая книга, которая запускает другие шаблоны с поддержкой макросов (которые генерируют и сохраняют выходные данные), а затем присоединяет выходные данные к электронному письму. (Я не могу объединить их все в одну книгу, потому что количество вкладок, макросов и размер стали бы слишком громоздкими). Из-за конфиденциальности некоторых вещей, с которыми я работаю, я не могу поделиться своим точным кодом - но я урезал / заменил значения и предоставил «примеры» кода, который я попробовал ниже.
Проблема, с которой я столкнулся при попытке выполнить sh следующее:
- MainWB открывает SubWB1 и вызывает (Application.Run) макрос
- Макрос в SubWB1 создает и сохраняет выходной файл Excel
- SubWB1 закрывается, и MainWB продолжает работу со следующим отчетом
Моя проблема заключается в том, что после закрытия SubWB1 макросы в остановке MainWB работает ... Я пробовал:
1. Попробуйте 1: Вызов макроса SubWB1 в середине макроса MainWB с продолжением шагов после:
Sub AfternoonReport () 'macro in MainWB
'do stuff
Workbooks.Open FileName:="C:\Users\me\Documents\DailyReport\submacro1.xlsm"
Application.Run "'submacro1.xslm'!triggerFromMain" 'macro ends with .close, save changes false
'************STOPS HERE***********
Application.Wait Now + TimeValue("00:00:03")
generateEmail 'macro within MainWB
End Sub
2. Попробуйте 2: Вызов продолжения sub в MainWB в конце макроса в subWB:
Sub AfternoonReport () 'macro in MainWB
'do stuff
Workbooks.Open FileName:="C:\Users\me\Documents\DailyReport\submacro1.xlsm"
Application.Run "'submacro1.xslm'!triggerFromMain"
End Sub
Sub triggerFromMain () 'macro in subWB
'do stuff
Application.Run "'mainWB.xslm'!continueFromSub1"
End Sub
Sub continueFromSub1 () 'macro in MainWB
'do stuff
Workbooks("submacro1.xlsm").Close SaveChanges:=False
'************STOPS HERE***********
Application.Wait Now + TimeValue("00:00:03")
generateEmail 'macro within MainWB
End Sub
3. Попробуйте 3: тот же пример, что и выше, но назначение subWB для объекта рабочей книги publi c в mainWB:
'Declarations in mainWB
Public subWBobj As Workbook
Sub AfternoonReport () 'macro in MainWB
'do stuff
Set subWBobj = Workbooks.Open FileName:="C:\Users\me\Documents\DailyReport\submacro1.xlsm"
Application.Run "'submacro1.xslm'!triggerFromMain"
End Sub
Sub triggerFromMain () 'macro in subWB
'do stuff
Application.Run "'mainWB.xslm'!continueFromSub1"
End Sub
Sub continueFromSub1 () 'macro in MainWB
'do stuff
subWBobj.Close SaveChanges:=False
'************STOPS HERE***********
Application.Wait Now + TimeValue("00:00:03")
generateEmail 'macro within MainWB
End Sub
4. Попробуйте 4: Вызов макроса продолжения из события BeforeClose в subWB
Sub AfternoonReport () 'macro in MainWB
'do stuff
Workbooks.Open FileName:="C:\Users\me\Documents\DailyReport\submacro1.xlsm"
Application.Run "'submacro1.xslm'!triggerFromMain"
End Sub
Sub triggerFromMain () 'macro in subWB
'do stuff
ThisWorkbook.Close SaveChanges:=False
End Sub
Sub Workbook_BeforeClose () 'macro in subWB
Application.Run "'mainWB.xslm'!continueFromSub1"
'********Doesnt allow the workbook to close and just fires macros in the mainWB - causing other issues*******
End Sub
Примечание. Во всех случаях, кроме примера 4, я не получаю никаких ошибок - поэтому код не нарушается просто кажется, что он выходит из макроса в MainWB для функции ".Close", и, следовательно, не переходит к дальнейшему коду.
Любые предложения будут с благодарностью! Я перепробовал все, что только мог придумать, и я так долго смотрю на одни и те же строки кода! :)