Workbook.Activate метод действует странно - PullRequest
0 голосов
/ 12 июня 2018

У меня есть надстройка Excel, выполняющая процедуру, которая отображает MsgBox OKOnly, если определенный критерий не выполняется, и пытается закрыть форму пользователя, активировать определенную книгу и прекратить выполнение кода.В событии UserForm_Terminate () у меня есть:

Private Sub UserForm_Terminate()

    Debug.Print ActiveWorkbook.Name
    Application.ScreenUpdating = True
    wbk.Activate
    sht.Activate
    Debug.Print ActiveWorkbook.Name
    End

End Sub

Если я начинаю запускать процедуру с новой пустой пустой книгой, эта книга остается активной книгой после завершения кода, но оба приведенных выше оператора печати указывают, чтоцелевой wbk на самом деле активен.Однако, если я использую точку останова и перехожу через wbk.Activate, целевой wbk активируется, как и ожидалось.Объекты книги и рабочего листа доступны, и ошибки нет.Любые идеи, почему Workbook.Activate ведет себя не так, как ожидалось во время выполнения?Я ожидал, что включение обновления экрана решит мою проблему, но без кубиков.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Я не уверен, является ли ошибка SDI моей проблемой, но она привела меня к ответу (спасибо @Profex).Я не смог воспроизвести эту ошибку, и в моей процедуре также есть другой путь, который заканчивается тем же событием Userform_Terminate () и действительно повторно активирует целевой wbk, хотя я не могу определить, что вызываетотличающийся функционал.Тем не менее, одним из решений этой проблемы было скрыть и затем показать активное окно, и этого достаточно, хотя, вероятно, не идеально во многих ситуациях:

Private Sub UserForm_Terminate()

    Dim win As Window

    wbk.Activate
    sht.Activate

    Set win = Application.ActiveWindow
    win.visible = False
    win.visible = True

    End

End Sub
0 голосов
/ 12 июня 2018

@ barX Он не полагается на ActiceWorkbook для кода, он просто проверяет его, чтобы увидеть, работает ли он ...

Кстати Добро пожаловать в ошибку Excel 2013 SDI!

Может быть, поможет следующий способ инициализации / использования пользовательской формы.См. Статью Mathieu RubberDuck по Userform.Show

В соответствующей заметке, возможно, сработает также изменение дескриптора родительского окна для формы перед закрытием.См. Сохранение пользовательских форм поверх Windows SDI в Excel 2013 и выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...