Если у вас есть данные, вы можете использовать алгоритм Дейкстры, чтобы получить краткий путь между узлами в графе. Создать граф с узлами, представляющими местоположение шины
.Я использую оба из предлагаемых решений:
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
...
...
...
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Я также предпочитаю использовать оба из предлагаемых решений, но также и хранение пользователей предыдущий режим вычисления.
Для этого конкретного приложения это не могло бы быть никакой важной персоной, но это - обычно лучшая практика, чтобы позволить пользователям восстановить свои настройки после того, как Ваша процедура закончена:
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
Здание на Joe и SeeR (это использует старый синтаксис, таким образом, это совместимо с VBA Office 2000):
On Error Goto AfterCalculation
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
...
AfterCalculation:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Приложение. 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
Можно выключить автоматическое вычисление в диалоговом окне опций, оно устанавливает его так, чтобы оно только вычислило при нажатии F9.