Option Explicit
Public Sub FindShapesForEntities()
Static vme As New VisioModelingEngine
Dim models As IEnumIVMEModels
Dim model As IVMEModel
Set models = vme.models
Set model = models.Next
Dim elements As IEnumIVMEModelElements
Dim element As IVMEModelElement
Dim objEntity As IVMEEntity
Set elements = model.elements
Set element = elements.Next
Do While Not element Is Nothing
If element.Type = eVMEKindEREntity Then Set objEntity = element
Dim objAttribs As IEnumIVMEAttributes
Dim objAttr As IVMEAttribute
Set objAttribs = objEntity.Attributes
Set objAttr = objAttribs.Next
Do While Not objAttr Is Nothing
If objAttr.ColumnNumber = 0 Then
Dim sEntityName As String
Dim sOrigFieldName As String
sEntityName = objEntity.PhysicalName
sOrigFieldName = objAttr.PhysicalName
objAttr.PhysicalName = sEntityName
Visio.Application.Addons("dbrs").Run ""
Dim intShapeId As Integer
intShapeId = FindShapeIdByEntityName(sEntityName)
objAttr.PhysicalName = sOrigFieldName
If intShapeId > -1 Then
Debug.Print intShapeId
Debug.Print objEntity.PhysicalName
CreateHyperlink intShapeId, objEntity.PhysicalName
End If
End If
Set objAttr = objAttribs.Next
Loop
End If
Set element = elements.Next
Loop
End Sub
Private Function FindShapeIdByEntityName(sEntityName As String) As Integer
Dim pag As Page
Dim shp As Shape
Dim myArray
Dim mySecondArray
Dim sShapeEntityName As String
FindShapeIdByEntityName = -1 Set pag = Application.ActivePage
For Each shp In pag.Shapes
If shp.Style = "Normal" Then myArray = Split(shp.Text, vbTab) sShapeEntityName = myArray(1) mySecondArray = Split(sShapeEntityName, Chr(10)) sShapeEntityName = mySecondArray(0)
sShapeEntityName = Trim(Replace(sShapeEntityName, Chr(10), "")) If sShapeEntityName = sEntityName Then
FindShapeIdByEntityName = shp.ID
Exit Function
End If
End If
Next shp
End Function
Private Sub CreateHyperlink(shpId As Integer, sEntityName As String)
Dim pag As Page
Dim shp As Shape
Set pag = Application.ActivePage
Set shp = pag.Shapes.ItemFromID(shpId)
Dim vsoHlink1 As Visio.Hyperlink
If shp.Hyperlinks.Count > 0 Then Set vsoHlink1 = shp.Hyperlinks.Item(0)
Else
Set vsoHlink1 = shp.Hyperlinks.Add
End If
vsoHlink1.Name = shp.ID & "_link"
vsoHlink1.Address = sEntityName
End Sub