Страницы: 1
RSS
Переход (активация) на последнюю активную книгу
 
Доброго дня!
Подскажите марос, пожалуйста, позволяющий при нажатии на кнопку активировать книгу, которая была активной последней
Изменено: evg_glaz - 04.06.2026 12:14:54
 
Код
Option Explicit
Private AppE As MyAppEvents

Private Sub StartEvents()
    Application.EnableEvents = True
    Set AppE = New MyAppEvents
End Sub

Private Sub StopEvents()
    Set AppE = Nothing
End Sub

Public Sub SelectPreviousWorkbook()
    On Error Resume Next
    Workbooks(AppE.DeactivatedWorkbookName).Activate
    On Error GoTo 0
End Sub


Private WithEvents myApp As Application
Public DeactivatedWorkbookName As String

Private Sub Class_Initialize()
 Set myApp = Application
End Sub

Private Sub myApp_WorkbookDeactivate(ByVal Wb As Workbook)
    DeactivatedWorkbookName = Wb.Name
End Sub

 
МатросНаЗебре, ничего не происходит
 
Цитата
написал:
ничего не происходит
Является ли следствием "ничего не делаю"?
 
Цитата
написал:
Является ли следствием
Из Вашего файла ничего не происходит по нажатию
 
Включите обработку событий StartEvents.
После этого по нажатию будет переходить на предыдущую активную книгу.
 
МатросНаЗебре, вроде включено (я пока в Вашем файле пытаю)
 
Не Application.EnableEvents = True, а процедуру StartEvents. Ладно уже не надо
Код
Option Explicit
Private AppE As MyAppEvents

Private Sub StartEvents()
    Application.EnableEvents = True
    Set AppE = New MyAppEvents
End Sub

Private Sub StopEvents()
    Set AppE = Nothing
End Sub

Public Sub SelectPreviousWorkbook()
    If AppE Is Nothing Then StartEvents
    
    On Error Resume Next
    Workbooks(AppE.DeactivatedWorkbookName).Activate
    On Error GoTo 0
End Sub

 
МатросНаЗебре, Спасибо большое!
 
МатросНаЗебре, первым открываю файл с макросом (1), потом другую книгу (2), после первого перехода с 2 на 1 по нажатию кнопки в 1 макрос не срабатывает и обратно на 2 не переходит, при последующих переходах работает отлично. В чем может быть дело?  
Изменено: evg_glaz - 04.06.2026 16:48:10
 
Цитата
написал:
В чем может быть дело?
Как бы это неожиданно не звучало, но дело в том, что не включена обработка событий StartEvents. Можно:
- нажать кнопку перед открытием (2). Нелогично, но сработает.
- взять код из прикреплённого файла, он нажмёт за Вас.
 
МатросНаЗебре, как надо! Благодарен за помощь!  
 
МатросНаЗебре, а возможно такое реализовать, чтобы после автоматического перехода из книги с макросом (1) в книгу (2), в 2 активировался одноименный (открытый в книге 1) лист (названия листов одинаковые в обоих файлах).
 
Код
Public Sub SelectPreviousWorkbook()
    If AppE Is Nothing Then StartEvents
    
    Dim ActiveSheet_Name As String
    ActiveSheet_Name = ActiveSheet.Name
    
    On Error Resume Next
    Workbooks(AppE.DeactivatedWorkbookName).Activate
    Sheets(ActiveSheet_Name).Activate
    On Error GoTo 0
End Sub
 
МатросНаЗебре, Отлично! Большое спасибо! Хороших выходных!  
 
МатросНаЗебре, добрый день!
Цитата
написал:
а возможно такое реализовать, чтобы после автоматического перехода из книги с макросом (1) в книгу (2), в 2 активировался одноименный (открытый в книге 1) лист (названия листов одинаковые в обоих файлах).
и далее активировалась одноименная (активная в файле 1) ячейка?
Спасибо Вам большое за периодическую помощь!!!
Страницы: 1
Читают тему
Наверх