Вот, потестил разные способы выделения фигур. Всех. 5151 штука.
Код:
Option Explicit
'Результат (выделение на листе 5151 шейпа):
'1. Средний ноутбук:
'Test_1 - 0,3007813
'Test_2 - 1,414063
'Test_3 - 65,09766
'2. Довольно мощный копьютер
'Test_1 - 0,1210938
'Test_2 - 0,5742188
'Test_3 - 24,65625
Dim t
Dim sh As Visio.Shape
Sub Test_1() ' штатное выделение
t = Timer
ActiveWindow.DeselectAll
ActiveWindow.SelectAll
Debug.Print Timer - t
End Sub
Sub Test_2() ' создание выделения "в памяти"
Dim i As Integer, vsoSel As Visio.Selection
Set vsoSel = ActiveWindow.Selection
ActiveWindow.DeselectAll
t = Timer
For Each sh In ActivePage.Shapes
vsoSel.Select sh, visSelect
Next
ActiveWindow.Selection = vsoSel
Debug.Print Timer - t
End Sub
Sub Test_3() ' выделение перебором
ActiveWindow.DeselectAll
t = Timer
For Each sh In ActivePage.Shapes
ActiveWindow.Select sh, visSelect
Next
Debug.Print Timer - t
End Sub
Результат вполне очевиден.
Можно попробовать: