我有一个包含数千行的电子表格。每行包含一个带路径的超链接。
路径无效,但可以通过用正确的值替换它的第一部分来轻松修复。
Example: current hyperlink: F:\Help\index.html
Needed: P:\SystemHelp\index.html
问题是标准的查找/替换不会“看到”超链接的内容。
是编写宏的唯一方法还是有其他方法可以做到?
答案 0 :(得分:14)
Hey 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
答案 1 :(得分:12)
不需要宏
警告:图表等某些内容可能会丢失,但公式和格式似乎会被保留。
将文档另存为XML Spread Sheet
使用记事本
“全部替换”从“错误的文字字符串”改为“正确的文字字符串”
保存
使用Excel打开文件
以原始格式保存文件
答案 2 :(得分:9)
除了宏之外,我不知道另一种方式。但看起来像某人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中发生错误或 ReplaceText。如果要执行搜索并替换所有 工作簿中的工作表,请使用WBReplaceHyperlinkURL例程 而不是ReplaceHyperlinkURL。
答案 3 :(得分:1)
另一种方法是插入'字符,使其全部为文本,搜索并替换,然后通过并删除'字符。
答案 4 :(得分:1)
以下是我通常用于此目的的内容(因为我从不习惯使用宏或VB脚本)。这不会影响任何格式化 - 所有图形和图表都会保持不变。
将
.xlsx
或.xls
文件重命名为.zip
使用您选择的任何文本编辑器解压缩并编辑相应的
.xml
或xml.rels
文件- 醇>
将
.zip
文件重命名为.xlsx
(或.xls
)
多数民众赞成。
对于第2步,您可以选择以下方式之一:
- 内编辑
直接在
.zip
文件或提取
< / LI>.zip
,然后在.zip
之外编辑文件,然后将其替换回.zip
- 拖放或- 醇>
解压缩.zip,仅使用Windows资源管理器进行编辑并再次压缩(右键单击&gt;发送到&gt;压缩(压缩)文件夹)。
工作表通常位于以下路径中的.zip
内
xl > worksheets
。
有时链接存储在.rels
xl > worksheets > rels
文件中