【问题标题】:Excel Hyperlink mass updateExcel 超链接批量更新
【发布时间】:2018-08-21 03:17:04
【问题描述】:

我有一个包含数千行的电子表格。每行都包含一个带有路径的超链接。

路径无效,但可以通过将其第一部分替换为正确的值来轻松修复。

Example: current hyperlink: F:\Help\index.html

Needed: P:\SystemHelp\index.html

问题是标准的查找/替换没有“看到”超链接的内容。

是编写宏的唯一方法还是有其他方法?

【问题讨论】:

  • 您使用的是哪个版本的 Excel?在 Excel 2000 (9.0.3821 SR-1) 中查找/替换超链接对我有用
  • Excel 2010,我需要替换超链接的地址部分而不是可见部分
  • 啊,有道理。 dcp 的回答有用吗?
  • 它可能会...如果可行,我将尝试解决方案并在此处发布

标签: excel


【解决方案1】:

嘿cnx.org,重新发明替换功能的方法。

Sub FindReplaceHLinks(sFind As String, sReplace As String, _
    Optional lStart As Long = 1, Optional lCount As Long = -1)

    Dim rCell As Range
    Dim hl As Hyperlink

    For Each rCell In ActiveSheet.UsedRange.Cells
        If rCell.Hyperlinks.Count > 0 Then
            For Each hl In rCell.Hyperlinks
                hl.Address = Replace(hl.Address, sFind, sReplace, lStart, lCount, vbTextCompare)
            Next hl
        End If
    Next rCell
End Sub

Sub Doit()

    FindReplaceHLinks "F:\help\", "F:\SystemHelp\"

End Sub

【讨论】:

    【解决方案2】:

    不需要宏

    警告:图表等某些内容可能会丢失,但似乎保留了公式和格式。

    • 将文档另存为 XML 电子表格

    • 用记事本打开文件

    • “全部替换”从“错误的文本字符串”到“正确的文本字符串”

    • 保存

    • 用 Excel 打开文件

    • 以原始格式保存文档

    【讨论】:

      【解决方案3】:

      我不知道除了宏之外的其他方法。但看起来有人 already wrote one 这样做。

      Public Sub ReplaceHyperlinkURL(FindString As String, ReplaceString As String) Dim LinkURL As String Dim PreStr As String Dim PostStr As String Dim NewURL As String Dim FindPos As Integer Dim ReplaceLen As Integer Dim URLLen As Integer Dim MyDoc As Worksheet Dim MyCell As Range On Error GoTo ErrHandler Set MyDoc = ActiveSheet For Each MyCell In MyDoc.UsedRange If MyCell.Hyperlinks.Count > 0 Then LinkURL = MyCell(1).Hyperlinks(1).Address FindPos = InStr(1, LinkURL, FindString) If FindPos > 0 Then 'If FindString is found ReplaceLen = Len(FindString) URLLen = Len(LinkURL) PreStr = Mid(LinkURL, 1, FindPos - 1) PostStr = Mid(LinkURL, FindPos + ReplaceLen, URLLen) NewURL = PreStr & ReplaceString & PostStr MyCell(1).Hyperlinks(1).Address = NewURL 'Change the URL End If End If Next MyCell Exit Sub ErrHandler: MsgBox ("ReplaceHyperlinkURL error") End Sub Public Sub WBReplaceHyperlinkURL(FindString As String, ReplaceString As String) 'For all sheets in the workbook Dim LinkURL As String Dim PreStr As String Dim PostStr As String Dim NewURL As String Dim FindPos As Integer Dim ReplaceLen As Integer Dim URLLen As Integer Dim MyDoc As Worksheet Dim MyCell As Range On Error GoTo ErrHandler For Each WS In Worksheets WS.Activate Set MyDoc = ActiveSheet For Each MyCell In MyDoc.UsedRange If MyCell.Hyperlinks.Count > 0 Then LinkURL = MyCell(1).Hyperlinks(1).Address FindPos = InStr(1, LinkURL, FindString) If FindPos > 0 Then 'If FindString is found ReplaceLen = Len(FindString) URLLen = Len(LinkURL) PreStr = Mid(LinkURL, 1, FindPos - 1) PostStr = Mid(LinkURL, FindPos + ReplaceLen, URLLen) NewURL = PreStr & ReplaceString & PostStr MyCell(1).Hyperlinks(1).Address = NewURL 'Change the URL End If End If Next MyCell Next WS MsgBox ("Hyperlink Replacement Complete") Exit Sub ErrHandler: MsgBox ("ReplaceHyperlinkURL error") End Sub
      

      代码必须放在 VBA 代码模块中。从电子表格中,打开 开发人员功能区中的 VBA 编辑器。开发人员功能区可以是 在 Excel 选项的常用选项卡中打开。然后选择插入 - 菜单中的模块。复制代码并将其粘贴到模块中。然后 保存模块。

      为了运行该过程,请创建一个包含以下内容的宏 行并在 Excel 中运行宏。请务必将 FindText 替换为 您要查找的地址部分和 ReplaceText 与 您要替换它的文本。

      Call ReplaceHyperlinkURL("FindText", "ReplaceText")
      

      请务必在之前制作电子表格的备份副本 运行宏以防万一 FindText 或 替换文本。如果要对所有执行搜索和替换 工作簿中的工作表,而是使用 WBReplaceHyperlinkURL 例程 而不是 ReplaceHyperlinkURL。

      【讨论】:

        【解决方案4】:

        这是我通常用于此目的的内容(因为我从不习惯使用宏或 VB 脚本)。这不会影响任何格式 - 您的所有图形和图表都将保持原样。

        1. .xlsx.xls 文件重命名为.zip

        2. 使用您选择的任何文本编辑器解压缩并编辑适当的 .xmlxml.rels 文件

        3. .zip 文件重命名为.xlsx(或.xls

        就是这样。

        对于第 2 步,您可以选择以下方式之一:

        1. 直接在.zip 文件内编辑或

        2. 提取.zip,然后编辑.zip 之外的文件,然后将其替换回.zip - 拖放或

        3. 解压缩 .zip,进行编辑并仅使用 Windows 资源管理器将其重新压缩(右键单击 > 发送到 > 压缩(压缩)文件夹)。

        工作表通常位于以下路径中的.zipxl > worksheets。 有时链接存储在.rels 文件中存储在xl > worksheets > rels

        【讨论】:

        • 因为我讨厌 VBA,这节省了我的时间。谢谢你:)
        【解决方案5】:

        另一种方法是插入一个 ' 字符,使其成为所有文本,以进行搜索和替换,然后通过并删除 ' 字符。

        【讨论】:

        • 它对一些链接有效,但不是全部。字符串被替换了,但不是所有的超链接,只是看似随机的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多