Public Sub CeeB1()
' == USAGE EXAMPLES ==
' workbook, old , new
'RelinkAllHyperlinks ThisWorkbook, "ACT 2022", "BUD 2022"
'RelinkAllHyperlinks ActiveWorkbook, "ACT 2022", "BUD 2022"
' ----------- range ------------- , old , new
'RelinkSelectedHyperlinks Sheets("Sheet1").Range("A1:BC200"), "ACT 2022", "BUD 2022"
RelinkSelectedHyperlinks Selection, "ACT 2022", "BUD 2022"
End Sub
Public Sub RelinkAllHyperlinks(ByVal argWb As Workbook, ByVal argOldRefName As String, ByVal argNewRefName As String)
Dim Sht As Worksheet, Hl As Hyperlink
For Each Sht In argWb.Worksheets
For Each Hl In Sht.Hyperlinks
ApplyRelink Hl, argOldRefName, argNewRefName
Next Hl
Next Sht
End Sub
Public Sub RelinkSelectedHyperlinks(ByVal argRng As Range, ByVal argOldRefName As String, ByVal argNewRefName As String)
Dim Sht As Worksheet, Hl As Hyperlink, Anchor As Range
Set Sht = argRng.Parent
For Each Hl In Sht.Hyperlinks
On Error Resume Next
Set Anchor = Hl.Range
On Error GoTo 0
If Not Anchor Is Nothing Then
If Not Application.Intersect(argRng, Anchor) Is Nothing Then
ApplyRelink Hl, argOldRefName, argNewRefName
End If
End If
Next Hl
End Sub
Public Sub ApplyRelink(ByRef argHl As Hyperlink, ByVal argOldRefName As String, ByVal argNewRefName As String)
If VBA.InStr(1, argHl.SubAddress, ShtNameFromRef(argOldRefName), vbTextCompare) > 0 Then
If WorksheetExists(argHl.Parent.Parent.Parent, ShtNameFromRef(argNewRefName)) Then
argHl.SubAddress = VBA.Replace(argHl.SubAddress, BuildRef(argOldRefName), BuildRef(argNewRefName), , , vbTextCompare)
End If
End If
End Sub
Public Function ShtNameFromRef(ByVal argRefName As String) As String
ShtNameFromRef = VBA.Split(VBA.Replace(argRefName, "'", ""), "!")(0)
End Function
Public Function BuildRef(ByVal argRefName As String) As String
argRefName = VBA.Replace(argRefName, "'", "")
BuildRef = VBA.IIf(VBA.InStr(1, argRefName, " ") > 0, "'" & VBA.Replace(argRefName, "!", "'!"), argRefName)
End Function
Public Function WorksheetExists(ByVal argWb As Workbook, ByVal argShtName As String) As Boolean
On Error Resume Next
WorksheetExists = Not argWb.Worksheets(argShtName) Is Nothing
End Function