Håller på att skriva ett vba macro som editerar hyperlänkar i visio och word dokument. I word så kan man ju enkelt nå hyperlänkarna genom att deklarera en hyperlink variabel och använda sig av "activedocument.hyperlinks". Men i visio så saknas ju denna hyperlink egenskap i activedocument. Så min fråga är, hur kommer man runt detta/finns det något motsvarande? Här är en enkel variant som listar alla länkar i direktfönstret Tackar för svaret. Löste problemet för ett dokument på ett litet annat sätt än du föreslog: Skulle kunna göra något sånt här..VBA Visio hyperlänkar
/RobinSv: VBA Visio hyperlänkar
Sub getLinks()
Dim myShapes As Shapes
Set myShapes = ActivePage.Shapes
Dim myShape As Shape
Dim myLink As Hyperlink
For Each myShape In myShapes
For Each myLink In myShape.Hyperlinks
Debug.Print myLink.Address
Next
Next
End Sub
Sv:VBA Visio hyperlänkar
Dim oHyper As Hyperlink
Dim myShape As Visio.Shape
Dim myDoc As Visio.Document
Dim myShapes As Shapes
ActiveDocument.Saved = False
Set myShapes = ActiveDocument.Pages.ItemFromID(0).PageSheet.Shapes
For Each myShape In myShapes
For Each oHyper In myShape.Hyperlinks
With oHyper
.Address = Replace(.Address, sGammal, sNy)
.Description = Replace(.Description, sGammal, sNy)
End With
Next
Next
ActiveDocument.Save
Funkar utmärkt. Men jag ville ju ha en loop som gick igenom många dokument. Jag testade att göra en sådan, men den kör bara igenom första filen, och hoppar sedan ur med felmeddelandet: "error on ". Så det verkar inte som att den kommer åt nästa fil. Här är den väsentliga delen av den koden:
myFile = Dir(PathToUse & "\D2aa11.vsd")
Do While Len(myFile) > 0
Set myDoc = Documents.Open(PathToUse & "\" & myFile)
...
... (massa kod)
...
myFile = Dir ' get next file to open
msgbox(myfile)
Loop
msgboxen visar bara en tom ruta, alltså ingen fil. Vad beror detta på? Ska man använda något annat kommando än Dir i Visio, eller är problemet något annat?Sv: VBA Visio hyperlänkar
Sub links()
Dim filenames() As String
Dim path As String
Dim myDoc As Document
Dim myPage As Page
Dim myShape As Shape
Dim myLink As Hyperlink
Set objDialog = CreateObject("UserAccounts.CommonDialog")
objDialog.Filter = "Visio dokument|*.vsd|Alla filer|*.*"
objDialog.Flags = &H200
objDialog.FilterIndex = 1
intFileCount = objDialog.ShowOpen
filenames = Split(objDialog.FileName, " ")
path = filenames(0)
For i = 1 To UBound(filenames) ' Gå igenom alla markerade dokument
Set myDoc = Documents.Open(path & filenames(i)) ' öppna dokument
For Each myPage In myDoc.Pages ' gå igenom alla sidor i dokumentet
For Each myShape In myPage.Shapes ' gå igenom alla former på aktuell sida
For Each myLink In myShape.Hyperlinks ' gå igenom alla länkar på resp. form
' behandla länkinformationen
Debug.Print myLink.Address
Next
Next
Next
myDoc.Close ' stäng dokument
Next
End Sub