Grishek писал(а):Работает если активировать отдельно макрос, но не работает при открытии и закрытии.
Для того, чтобы макрос запускался автоматически после открытия и перед закрытием книги, в т.ч. и программно, можно использовать соответствующие события (см.далее), которые нужно разместить строго в модуле книги -
ThisWorkbook(ЭтаКнига)
Код: Выделить всё
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
End Sub
Grishek писал(а):Не могу придумать как привязать ко всем открывающимся книгам и активацию / деактивацию книги с учетом всех остальных открытых книг.
Для этого также есть свои события, а именно :
Код: Выделить всё
Private Sub Workbook_Activate()
End Sub
Private Sub Workbook_Deactivate()
End Sub
Если же нужно отслеживать действия со всеми книгами, то можно воспользоваться личной книгой макросов (
Personal.xls) и использовать события приложения (где Wb это книга)
Код: Выделить всё
Private WithEvents xlApp As Excel.Application
Private Sub Workbook_Open()
Set xlApp = Application
End Sub
'Private Sub xlApp_WorkbookOpen(ByVal Wb As Workbook)
'
'End Sub
'
'Private Sub xlApp_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
'
'End Sub
Private Sub xlApp_WorkbookActivate(ByVal Wb As Workbook)
End Sub
Private Sub xlApp_WorkbookDeactivate(ByVal Wb As Workbook)
End Sub
P.S. Eсли Вас волнует совместимость версий, то количество строк можно указать не только как константу (Excel 97-2003 = 65536, 2007 = 1048576) но и просто
Rows.Count
[quote="Grishek"]Работает если активировать отдельно макрос, но не работает при открытии и закрытии.[/quote]
Для того, чтобы макрос запускался автоматически после открытия и перед закрытием книги, в т.ч. и программно, можно использовать соответствующие события (см.далее), которые нужно разместить строго в модуле книги - [b]ThisWorkbook(ЭтаКнига)[/b]
[code]Private Sub Workbook_Open()
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
End Sub[/code]
[quote="Grishek"]Не могу придумать как привязать ко всем открывающимся книгам и активацию / деактивацию книги с учетом всех остальных открытых книг.[/quote]
Для этого также есть свои события, а именно :
[code]Private Sub Workbook_Activate()
End Sub
Private Sub Workbook_Deactivate()
End Sub[/code]
Если же нужно отслеживать действия со всеми книгами, то можно воспользоваться личной книгой макросов ([b]Personal.xls[/b]) и использовать события приложения (где Wb это книга)
[code]Private WithEvents xlApp As Excel.Application
Private Sub Workbook_Open()
Set xlApp = Application
End Sub
'Private Sub xlApp_WorkbookOpen(ByVal Wb As Workbook)
'
'End Sub
'
'Private Sub xlApp_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
'
'End Sub
Private Sub xlApp_WorkbookActivate(ByVal Wb As Workbook)
End Sub
Private Sub xlApp_WorkbookDeactivate(ByVal Wb As Workbook)
End Sub[/code]
P.S. Eсли Вас волнует совместимость версий, то количество строк можно указать не только как константу (Excel 97-2003 = 65536, 2007 = 1048576) но и просто [b]Rows.Count[/b]