有没有快速的方法可以从多个命名范围中删除外部链接?

有没有快速的方法可以从多个命名范围中删除外部链接?

有没有有效的方法可以删除命名范围中的外部链接(或者完全阻止它们的方法)?

我有一个跟踪电子表格,我会使用它并将其部署到多个客户那里。他们使用电子表格来跟踪数据,然后每隔几个月将表格提交给我进行审核。我会定期将一项功能添加到电子表格的新选项卡中,并在收到每个客户的副本时将其填充到其中。

当我将新选项卡复制到客户端电子表格中时,它会将外部链接带回模板。这些链接很容易在公式中删除,但它们也总是出现在 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

相关内容