Страницы: 1
RSS
Как отследить открытие другой книги VBA
 
Уважаемые форумчане! Подскажите пожалуйста! Есть книга (телефонный справочник), лежит на общем ресурсе, прав на изменения её у пользователей нет. Каждый раз при открытии книги я открываю определенную страницу, раскрываю группировку, и ctrl +f открываю окно поиска. Хотел автоматизировать, но не получается. Событие при открытии книги (сохраненное в общей книге макросов!) не срабатывает. Вопрос - как увидеть открытие книги из уже открытого приложения excel
Код
?Private Sub Workbook_Open()
    ' Если открыт телефонный справочник, открыть страницу КЭ, развернуть группировку
    If ActiveWorkbook.Name = Тел - справ.xls Then
            Sheets("КЭ").Select
            ActiveSheet.Outline.ShowLevels RowLevels:=3
    End If
End Sub
 
Как отследить событие(например выделение ячеек) в любой книге?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, спасибо!
 
Видимо я что-то сделал не так, при открытом приложении excel, (открыты другие книги) событие не происходит. Код расположен в главной книге personal
Код
Private WithEvents App As Application
Private Sub Workbook_Open()
    Set App = Application
End Sub
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
    ' Если открыт телефонный справочник, открыть страницу КЭ, развернуть группировку
    If Wb.Name = "Тел - справ.xls" Then
        Sheets("КЭ").Select
        ActiveSheet.Outline.ShowLevels RowLevels:=3
    End If
End Sub
Изменено: tkachev.al - 02.03.2017 15:40:55
 
А Вы перезапускали Excel, чтобы событие Private Sub Workbook_Open() выполнилось? Или вручную его для начала выполните, чтобы объект App был связан с Application.
Плюс опишите - точно не выполняется или Вы не видите действий? Может ошиблись с именем книги и условие просто не выполняется.
Изменено: The_Prist - 02.03.2017 16:01:38
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Перезапускал. Что-то не могу понять, сейчас все работает. Может быть связано с тем, что на работе office 2010, a дома 2016. в 2010 все книги по умолчанию в одном окне открываются (приложении), соответственно и события нового _Open не возникает при открытии следующей книги, правильно?
подправил.
Код
Private WithEvents App As Application
Private Sub Workbook_Open()
    Set App = Application
End Sub
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
    ' Если открыт телефонный справочник, открыть страницу КЭ, развернуть группировку
    If Wb.Name = "Тел - справ.xls" Then
        Wb.Sheets("КЭ").Select
        'ActiveSheet.Outline.ShowLevels RowLevels:=3
    End If
End Sub
Изменено: tkachev.al - 02.03.2017 18:15:45
 
Цитата
tkachev.al написал:
по умолчанию в одном окне открываются (приложении), соответственно и события нового _Open не возникает при открытии следующей книги, правильно?
Нет: книга открылась - событие наступило. Если процедура в этой (открываемой) книге.
 
Нет, процедура в общей книге макросов personal
 
Для проверки напишите Stop в процедуре - тогда точно будете знать, срабатывает или нет.
Ещё один момент: может быть книги открываются в разных приложениях (процессах)?  
 
Когда открываются в разных, все работает, office 2013 и старше, а в 2010 в (все книги в одном окне) ставлю stop. не срабатывает.
 
Цитата
tkachev.al написал: Может быть связано с тем, что ... в 2010 все книги по умолчанию в одном окне открываются (приложении), соответственно и события нового _Open не возникает при открытии следующей книги, правильно?
Если открывать из проводника, то книга открываться может и в одном экземпляре Excel и в разных, это зависит от того, что записано в реестре.
Строку вызова обычно можно настроить в проводнике: Сервис - Свойство папки - Типы файлов. но с Excel 2010 могут быть проблемы - реестр таким способом корректируется не полностью, нужно его править вручную, или лучше выбрать "Использовать DDE".
Когда книга открывается в другом экземпляре Excel, то появляется предупреждение, что книга PERSONAL занята и предлагается открыть ее только для чтения.
Если при этом отказаться от открытия PERSONAL, то, естественно, её макросы будут недоступны.
Чтобы проверить код на работе первый файл можно открыть и из проводника, а все последующие открывайте из Excel - Файл - Открыть, тогда все книги будут гарантированно открыты в одном экземпляре Excel и  код книги PERSONAL должен сработать автоматически.
Изменено: ZVI - 02.03.2017 18:59:56
 
Цитата
Юрий М написал:
Для проверки напишите Stop в процедуре - тогда точно будете знать, срабатывает или нет.
Цитата
The_Prist написал:
Может ошиблись с именем книги и условие просто не выполняется.
Еще раз перепроверил, поставил stop, перезапустил, выяснил что имя неверно (пробел лишний).
Все работает! Спасибо!
Только группировки не раскрываются) ActiveSheet.Outline.ShowLevels RowLevels:=3
Страницы: 1
Наверх