Собственно, у меня есть макрос, который после своего выполнения должен закрывать книгу. На событие Workbook_BeforeClose я вешаю "сборщик мусора":[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Sh As Worksheet
ThisWorkbook.Activate Worksheets("URL").Visible = xlVeryHidden Application.DisplayAlerts = False For Each Sh In Worksheets If Sh.Name <> "URL" And Sh.Name <> "Кнопка" Then Sh.Delete Next Sh ThisWorkbook.Save
End Sub
[/vba]который исправно отрабатывает. Только вот если событие вызвано не пользователем, а кодом, то код ничего вообще не делает. То есть ВБА исправно проходит по всем веткам кода и... никаких изменений в файле. Вызов из события отдельного макроса со сборщиком, DoEvents и наоборот Application.EnableEvents=False не помогают ничуточки. Собственно, как это обойти — понятно, нужно вызвать "сборщик" из основного кода непосредственно перед строкой ThisWorkbook.Close. Непонятно другое — на кой, простите, нужно событие, которое нельзя обработать...
Собственно, у меня есть макрос, который после своего выполнения должен закрывать книгу. На событие Workbook_BeforeClose я вешаю "сборщик мусора":[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Sh As Worksheet
ThisWorkbook.Activate Worksheets("URL").Visible = xlVeryHidden Application.DisplayAlerts = False For Each Sh In Worksheets If Sh.Name <> "URL" And Sh.Name <> "Кнопка" Then Sh.Delete Next Sh ThisWorkbook.Save
End Sub
[/vba]который исправно отрабатывает. Только вот если событие вызвано не пользователем, а кодом, то код ничего вообще не делает. То есть ВБА исправно проходит по всем веткам кода и... никаких изменений в файле. Вызов из события отдельного макроса со сборщиком, DoEvents и наоборот Application.EnableEvents=False не помогают ничуточки. Собственно, как это обойти — понятно, нужно вызвать "сборщик" из основного кода непосредственно перед строкой ThisWorkbook.Close. Непонятно другое — на кой, простите, нужно событие, которое нельзя обработать...StoTisteg