Загрузите приложение Excel в обычном режиме

#excel #vba

Вопрос:

У меня есть рабочая книга, в которой панель инструментов, полоса прокрутки, строка формул, заголовки и т. Д. Скрыты с помощью кода vba. Проблема в том, что когда я открываю новую книгу, все скрытое меню все еще скрыто. Как я могу нормально загрузить приложение Excel при закрытии или при открытой книге с кодом? Спасибо!

Вот код, который я использую, чтобы скрыть все меню, о которых я упоминал выше.

 Sub RemoveToolbars()
    On Error Resume Next
        With Application
           .DisplayFullScreen = True
           .CommandBars("Full Screen").Visible = False
           .CommandBars("MyToolbar").Enabled = True
           .CommandBars("MyToolbar").Visible = True
           .CommandBars("Worksheet Menu Bar").Enabled = True
           .CommandBars("Formula Bar").Visible = False
           .WindowState = xlMaximized
        End With
    On Error GoTo 0
    
    With ActiveWindow
        .DisplayHorizontalScrollBar = False
        .DisplayVerticalScrollBar = True
        .DisplayWorkbookTabs = False
        .DisplayHeadings = False
    End With
    
End Sub
 

Ответ №1:

Ваш исходный метод и ответ о его изменении приводят пользовательский интерфейс приложения в определенное состояние (с полноэкранным режимом, полосами прокрутки, отображаемыми/скрытыми командирами и т. Д.), А затем обратно в противоположное этому состоянию.

Это может быть или не быть так, как было изначально.

Более чистая реализация заключается в том, чтобы принудительно перевести пользовательский интерфейс приложения в определенное состояние (с полноэкранным режимом, полосами прокрутки, отображаемыми/скрытыми командирами и т. Д.), А затем снова вернуться в предыдущее состояние.

Таким образом, более продуманный подход мог бы быть:

  1. НАЖМИТЕ: Получите состояние всех вещей, которые вы хотите изменить, и сохраните их где-нибудь (например, переменную, скрытый диапазон рабочего листа или где-нибудь более фиксированное).
  2. НАБОР: Принудительно измените состояние всех вещей, которые вы хотите изменить (как вы сделали в исходном посте).
  3. POP: Восстановите состояние того, что вы изменили, вернитесь к тому, что было.

На этом этапе в вашем коде есть только шаг 2.

Вы также можете подумать о том, какие триггеры вы хотите вызвать на шаге 3. Происходит ли это только тогда, когда книга закрыта, или также когда пользователь переключает книги в другую книгу? Из вашего вопроса следует, что вам может понадобиться и то, и другое. Это можно сделать.

Кроме того, подумайте о проверке каждого состояния перед его изменением. Например, если панель инструментов, которую вы хотите отобразить, еще не показана, покажите ее. Это означает, что ваша строка не будет выполняться без необходимости, чтобы показать что-то уже показанное, скрыть что-то уже скрытое и т. Д.

Эта 3-ступенчатая реализация может сделать пользователей менее раздраженными (включая вас в будущем).

Если вы решите использовать этот подход, попробуйте, а затем, если вам нужна конкретная помощь, опубликуйте любые возникающие у вас проблемы.

Ответ №2:

Попробуйте изменить/сбросить то, что вы делаете с RemoveToolbars при закрытии книги, поместив этот код в модуль ThisWorkbook.

 Private Sub Workbook_BeforeClose(Cancel As Boolean)

    On Error Resume Next
    With Application
        .DisplayFullScreen = False
        .CommandBars("Full Screen").Visible = True
        .CommandBars("MyToolbar").Enabled = False
        .CommandBars("MyToolbar").Visible = False
        .CommandBars("Worksheet Menu Bar").Enabled = False
        .CommandBars("Formula Bar").Visible = True
        .WindowState = xlNormal
    End With
    On Error GoTo 0

    With ActiveWindow
        .DisplayHorizontalScrollBar = True
        .DisplayVerticalScrollBar = False
        .DisplayWorkbookTabs = True
        .DisplayHeadings = True
    End With

End Sub
 

Комментарии:

1. Виден только заголовок, но все остальное по-прежнему скрыто. Он также включен в полноэкранном режиме.

2. То, что я опубликовал, было быстрым решением, которое должно сработать, но на самом деле вам следует следовать совету @ed2 и сохранить все настройки перед запуском RemoveToolbars и использовать их в событии BeforeClose для восстановления.

3. да, да. Я работаю над этим. Ваше решение помогает. Я понял, что он конфликтует с другими кодами, поэтому он не работает. Спасибо!