Как исключить два листа из кальков при нажатии клавиши F9 и наличии кнопки для расчета этих двух листов? - PullRequest
0 голосов
/ 24 апреля 2020

У меня большая рабочая книга, и я пытаюсь осветить кальки при нажатии клавиши F9, поскольку это занимает почти 1,30 мин. Следовательно, я хотел бы отключить вычисления двух тяжелых листов и иметь макрос, который запускает формулы только при необходимости.

У меня есть этот код (1 для каждого листа):

Sub OneTimeOnlyCalc()

Sheets("Sheet1").EnableCalculation = True

Sheets("Sheet1").EnableCalculation = False

End Sub

Проблема в том, что когда я нажимаю F9, кальки замирают на 14%, как если бы эти два листа блокировали остальные кальки.

Вы когда-нибудь пробовали что-то подобное? Что бы вы порекомендовали обойти это?

1 Ответ

2 голосов
/ 24 апреля 2020

Вы можете использовать следующий код, чтобы отключить функцию клавиши F8 и назначить ей другую процедуру (в модуле ThisWorkbook):

Private Sub Workbook_Activate()
  Application.OnKey "{F9}", "SpecialCalculation"
End Sub

Вы можете решить таким же образом Shift + F9, Ctrl + Alt + F9 ("{+F9}"), выделив им ту же процедуру, что и ниже, "^%F9}" ...

Затем создайте свою собственную функцию вычисления:

Sub SpecialCalculation()
  Dim sh As Worksheet
  For Each sh In Worksheets
        If sh.Name <> "sheet1 to be excluded name" And _
               sh.Name <> "sheet2 to be excluded name" Then
            sh.Calculate
        End If
 Next
End Sub

Если вам необходимо вернуться к Поведение по умолчанию, используйте этот фрагмент кода в событии рабочей книги Deactivate:

Private Sub Workbook_Deactivate()
    Application.OnKey "{F9}"
End Sub

Отредактировано: Изменены события, которые будут использоваться после обсуждения с @PEH. Он был прав. Лучше сохранить это специальное поведение функции Вычисления только для рабочей книги, хранящей эти указанные c события, сконфигурированные как предложено.

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