有没有有效的方法可以删除命名范围中的外部链接(或者完全阻止它们的方法)?
我有一个跟踪电子表格,我会使用它并将其部署到多个客户那里。他们使用电子表格来跟踪数据,然后每隔几个月将表格提交给我进行审核。我会定期将一项功能添加到电子表格的新选项卡中,并在收到每个客户的副本时将其填充到其中。
当我将新选项卡复制到客户端电子表格中时,它会将外部链接带回模板。这些链接很容易在公式中删除,但它们也总是出现在 20 个左右的命名范围内。
我最终手动艰难地浏览了 20 个命名范围,以逐个删除每个外部链接。这很成问题,因为 Word 的命名范围界面很拥挤,在几百个字符后公式就会被删除。只需几个外部链接,即使是中等大小的公式也会变得很长,这意味着公式会被截断,我必须重新创建整个公式才能删除外部链接。
有没有更有效的方法来实现这一点? 是阻止命名范围引入外部链接的方法,还是快速从多个命名范围中删除链接的方法?
答案1
您是否尝试过复制选项卡,然后删除原始选项卡而不是移动选项卡?右键单击选项卡并选择“移动或复制”,然后确保选中“创建副本”复选框并从下拉列表中选择要复制到的书籍,这应该可以防止在工作表命名范围之间建立任何链接。
对于命名范围,您可以尝试以下代码:
Option Explicit
Sub NmChnger()
Dim Nm As Name
Dim Strt As Long, Finish As Long
Dim MyStr As String, MyMid As String
For Each Nm In Names
If InStr(Nm, "[") > 0 Then
MyStr = Nm
Strt = InStr(Nm, "[")
Finish = InStr(Nm, "]")
MyMid = Mid(Nm, Strt, Finish - Strt + 1)
Nm.RefersTo = Application.WorksheetFunction.Substitute(Nm, MyMid, vbNullString)
Debug.Print MyStr & " was changed to " & Nm
End If
Next Nm
End Sub
ALT + F11 应该会打开您的开发人员编辑器,插入一个模块,然后在模块中输入代码。从视图菜单中使“立即”窗口可见,然后将光标放在代码中并按下绿色播放按钮(或将其链接到工作簿中的按钮)来运行代码
它可能需要一些改进,但可能只是按原样工作,一旦您运行它,就从即时窗口复制文本,如果有任何需要修改的内容,请在此处发布回来。
注意 - 我刚刚看到您在原始问题中的评论,表明您的格式是“链接”而不是[链接]。如果是这种情况,您只需更改:
Strt = InStr(Nm, "[")
Finish = InStr(Nm, "]")
到
Strt = InStr(Nm, "'")
Finish = Len(Nm) - InStrRev(Nm, "'")
不确定为什么您的格式与我得到的不同,可能需要进一步排除故障,因为您可能需要在某处调整 + 或 -1。
答案2
感谢上面的回答。我已经改进了它,因为上面的答案没有删除文件名 PATH。我还添加了更改文件名的选项,然后检查是否继续。感谢大家给出的所有答案。
Option Explicit
Sub NamedRangeFileNameRemover()
'
' Appreciation and Acknowledgment to SUPERUSER site
' https://superuser.com/questions/1563994/...
' ...any-quick-way-to-remove-external-links-from-multiple-named-ranges
' problem is it keeps asking for a new name...
' when we want to remove filename link completely
'
' Modified by Fr Gerard Conlan OMI - 28-Aug-2021
' Removes or Replaces Filename Link
' Prompts for an alternative Filename (or leave BLANK to remove)
'
Dim Nm As Name
Dim Strt As Long, Finish As Long
Dim MyStr As String, MyMid As String, MyReplace As String
Dim Title As String
'
Title = "Named Range: Filename Remove or Replace"
'
'eg. file name link ='P:\Documents\[PAYMENT Template.xlsx]Accounts'!$A$1:$E$177
' After removed ='Accounts'!$A$1:$E$177
' EXCEL Autocorrected =Accounts!$A$1:$E$177
'
For Each Nm In Names
If InStr(Nm, "]") > 0 Then
MyStr = Nm
Strt = InStr(Nm, "[") 'This does not include the filename PATH
Finish = InStr(Nm, "]")
' MyReplace = vbNullString
Strt = 2 'This includes the filename PATH
If MyReplace = "" Then 'First Occurrence of a Named Range with a Filename
MyMid = Mid(Nm, Strt + 1, Finish - Strt) 'excludes leading "'"
MyReplace = InputBox("Enter New Filename or " & vbCrLf & _
"leave blank to remove the filenames completely" & vbCrLf & _
vbCrLf & "Current Filename= " & vbCrLf & vbCrLf & _
MyMid, _
Title, _
"")
If MsgBox("Continue: Are you Sure?" & vbCrLf & vbCrLf & _
MyReplace, _
vbOKCancel, Title) = vbCancel _
Then End
MyReplace = "'" & MyReplace
End If
MyMid = Mid(Nm, Strt, Finish - Strt + 1)
Nm.RefersTo = Application.WorksheetFunction.Substitute(Nm, MyMid, MyReplace)
Debug.Print MyStr & " was changed to " & Nm
End If
Next Nm
'
End Sub