I am all for lateral thinking
, but I think you are overthinking the approach. To use a copy you just need a couple of extra lines in the main macro.
Sub SaveLinkedFiles(olItem As Object)
'Graham Mayor - http://www.gmayor.com - Last updated - 22 Jun 2018
Dim olInsp As Outlook.Inspector
Dim wdDoc As Object
Dim oLink As Object
Dim oRng As Object
Dim strSource As String
Dim strFname As String
Dim fso As Object
Dim arrInvalid() As String
Dim lng_Index As Long
Dim strExt As String
Dim olTemp As MailItem
arrInvalid = Split("9|10|11|13|34|42|47|58|60|62|63|92|124", "|")
CreateFolders Environ("USERPROFILE") & "\Desktop\Outlook Hyperlinks"
Set fso = CreateObject("Scripting.FileSystemObject")
If TypeName(olItem) = "MailItem" Then
Set olTemp = CreateItem(0)
With olTemp
.Body = Replace(olItem.Body, Chr(11), Chr(13))
Set olInsp = .GetInspector
Set wdDoc = olInsp.WordEditor
.Display
For Each oLink In wdDoc.Hyperlinks
strSource = oLink.Address
If fso.FileExists(strSource) Then
strExt = Mid(strSource, InStrRev(strSource, Chr(46)))
Set oRng = oLink.Range.Paragraphs(1).Range
strFname = oRng.Text
strFname = Split(strFname, "=")(0)
For lng_Index = 0 To UBound(arrInvalid)
strFname = Replace(strFname, Chr(arrInvalid(lng_Index)), Chr(95))
Next lng_Index
FileCopy oLink.Address, Environ("USERPROFILE") & "\Desktop\Outlook Hyperlinks\" & strFname & strExt
End If
Next oLink
End With
End If
olTemp.Close olDiscard
lbl_Exit:
Set olTemp = Nothing
Set olInsp = Nothing
Set fso = Nothing
Set wdDoc = Nothing
Set oLink = Nothing
Exit Sub
End Sub