Как я препятствую тому, чтобы Excel представил электронную таблицу, поскольку мой макрос вычисляет его?

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

.
8
задан Deduplicator 23 February 2015 в 19:17
поделиться

5 ответов

Я использую оба из предлагаемых решений:

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
...
...
...
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
16
ответ дан 5 December 2019 в 08:01
поделиться

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

Для этого конкретного приложения это не могло бы быть никакой важной персоной, но это - обычно лучшая практика, чтобы позволить пользователям восстановить свои настройки после того, как Ваша процедура закончена:

Application.ScreenUpdating = False
PreviousCalcMode = Application.Calculation
Application.Calculation = xlCalculationManual
   ...  
   ...
   ...
Application.Calculation = PreviousCalcMode
Application.ScreenUpdating = True

NB. Это также стоило бы Вашего времени для вставки некоторой обработки ошибок, которая включает Приложение. ScreenUpdating должен ошибка происходить в Вашем в других отношениях блестящем коде ;) Если не изменяет память, меня право, Excel не покажет errormessages и т.д. когда ScreenUpdating = ложь. Что-то вроде этого:

Sub DoSomeThing


On Error Goto DisplayError

Application.ScreenUpdating = False
PreviousCalcMode = Application.Calculation
Application.Calculation = xlCalculationManual
   ...  
   ...
   ...
Application.Calculation = PreviousCalcMode
Application.ScreenUpdating = True

Exit Sub

DisplayError:
Application.Calculation = PreviousCalcMode
Application.ScreenUpdating = True

MsgBox Err.Description
End 'This stops execution of macro, in some macros this might not be what you want'
    '(i.e you might want to close files etc)'
End Sub
2
ответ дан 5 December 2019 в 08:01
поделиться

Здание на Joe и SeeR (это использует старый синтаксис, таким образом, это совместимо с VBA Office 2000):

On Error Goto AfterCalculation
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
...

AfterCalculation:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
1
ответ дан 5 December 2019 в 08:01
поделиться

Приложение. ScreenUpdating = ложь

И конечно задержанный это к Истинному снова, когда Вы закончили, даже если ошибка повышена. Пример:

Public Sub MyMacro
    On Error GoTo ErrHandler
    Application.ScreenUpdating = False
    ... do my stuff that might raise an error
    Application.ScreenUpdating = True
    Exit Sub
ErrHandler:
    Application.ScreenUpdating = True
    ... Do something with the error, e.g. MsgBox       
End Sub
2
ответ дан 5 December 2019 в 08:01
поделиться

Можно выключить автоматическое вычисление в диалоговом окне опций, оно устанавливает его так, чтобы оно только вычислило при нажатии F9.

0
ответ дан 5 December 2019 в 08:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: