Возможно, это связано с тем, что visSelect не определено в Excel VBA.
Вот несколько подробных (но более гибких) кодов, которые иллюстрируют еще несколько понятий. Часть, которую вы ищете, находится чуть ниже '// Теперь выберите фигуру # 1:
Option Explicit
Public Sub SelectVisioShapeFromExcel()
'// Setup:
'// 1. Open blank Visio drawing
'// 2. Draw 1 rectangle on the page
'// This will be Sheet.1
Dim visApp As Object
Set visApp = m_getVisAppOrNothing()
If (visApp Is Nothing) Then
'// The error handler will probably trigger before
'// we get here:
Debug.Print "Couldn't find Visio, exiting 'SelectVisioShapeFromExcel'"
GoTo Cleanup
End If
'// Get the active page:
Dim pg As Object
Set pg = visApp.ActivePage
If (pg Is Nothing) Then
Debug.Print "Visio has no active page, exiting 'SelectVisioShapeFromExcel'"
GoTo Cleanup
End If
'// We need to define the visSelect constant, since
'// we're in another universe (Excel):
'// Visio.VisSelectArgs.visSelect = 2
Const visSelect As Integer = 2
'// Now, select shape #1:
Const ShapeID As Integer = 1 '//...in case you want to change it
visApp.ActiveWindow.Select pg.Shapes.ItemFromID(ShapeID), visSelect
GoTo Cleanup
ErrorHandler:
Debug.Print "Error in SelectVisioShapeFromExcel:" & vbCrLf & Error$
Cleanup:
Set visApp = Nothing
End Sub
Private Function m_getVisAppOrNothing() As Object
'// Try to get a running instance of Visio, or fail
'// and return Nothing.
Set m_getVisAppOrNothing = Nothing
On Error GoTo ErrorHandler
'// Try and get Visio:
Dim visApp As Object
Set visApp = GetObject(, "Visio.Application")
Set m_getVisAppOrNothing = visApp
GoTo Cleanup
ErrorHandler:
Debug.Print "Error in m_getVisAppOrNothing:" & vbCrLf & Error$
Cleanup:
Set visApp = Nothing
End Function
Обратите внимание, что я сделал отдельную процедуру для получения Visio. Это лучше изолирует любые ошибки, которые могут возникнуть (например, Visio не работает), и сохраняет ваш основной код более чистым.
Я также вставил кусок кода, чтобы получить ActivePage, просто чтобы продемонстрировать, а также сократить окончательный код выбора.