【问题标题】:Can I find and replace multiple field codes with plain text, while retaining the value that the field refers to?我可以用纯文本查找和替换多个字段代码,同时保留字段引用的值吗?
【发布时间】:2018-04-10 04:05:09
【问题描述】:

“字段所指的值”是指{}之间的文本。

我有什么

目前,我在这样的文本页面中有很多超链接:

Testing 123 和测试321

我的希望

我想用纯文本查找和替换超链接域代码的每个实例。具体来说,我希望输出看起来像这样,在任何情况下:*www.hyperlink.com

我的尝试

到目前为止,我已经能够通过将以下内容放入“查找”表单中的超链接来选择相关字段:HYPERLINK "*"

但是,我不确定要在替换字段中添加什么以根据需要更新文本,手动复制每个链接,然后在每种情况下替换为“^c”。由于我有超过 100 页的链接密集文本,这是不可行的。我还尝试使用通配符并替换为文本:* 但通配符似乎无法识别它在代数上等同于“查找”表单的通配符。

我最接近的是当我尝试时: 查找:超链接“(*)” 替换:\1 选中“使用通配符”选项。

虽然它将超链接移动到 ref 标签之间,并消除了 HYPERLINK 文本,但保留了大括号 {}。因此,当我退出表单域模式 (Alt F9) 时,www.ExampleHyperlink.com 消失了,因为它被视为表单域!

当我将大括号放在“查找”字段中时,搜索失败 - 所以我猜我无法搜索它们,以便替换它们。

可能的代码?

Sub Macro3()
'
' Macro3 Macro
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "HYPERLINK ""(*)"""
        .Replacement.Text = "\1"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute replace:=wdReplaceAll
End Sub

对 MacroPod 的回应

谢谢!

现在,我可以删除超链接域代码,并保留超链接 :)

我将您的宏与以下宏/步骤结合起来以添加文本并围绕每个 URL:

Sub Macro1()
'
' Macro1 Macro
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "(<http://*.com>)"
        .Replacement.Text = "<ref>\1</ref>"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute replace:=wdReplaceAll
    With Selection.Find
        .Text = "(<www.*.com>)"
        .Replacement.Text = "<ref>\1</ref>"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute replace:=wdReplaceAll
End Sub

它几乎可以完美运行,只是“.com”之后的 URL 的任何部分都被遗漏了。例如,如果 URL 是:'https://www.google.com/intl/en_us/health/about/',那么输出是:

'<ref> https://www.google.com </ref> /intl/en_us/health/about/' 

这不是我想要的,因为我希望第二个 ref 标记出现在 URL 的最后一部分之后。另一个问题是,无论链接到 URL 的锚文本是什么,都会消失。理想情况下,它会出现在标签之前。那是因为某些东西通常是这样链接的:cooldog 总是很酷。我非常感谢您的帮助。知道我该如何处理吗?

【问题讨论】:

  • 你不能只用查找/替换来做到这一点——它需要编码。为了在 Stack Overflow 上提出这个问题(参见 help center),您需要自己完成一些工作(编码)。我建议您在执行有效的 Find 时录制宏。使用edit 链接将该代码包含在您的问题中。然后,我们可以向您展示如何修改它以将链接文本从字段中取出(not 表单字段 - 这是其他内容)并删除该字段。
  • 旁注:您可以使用不带通配符的 ^d 搜索字段括号 { }。但这将选择整个字段,而不仅仅是括号,因此在这种特殊情况下对您没有帮助。
  • 谢谢 Cindy,我已经用可能的代码更新了我的主要帖子。我还没有学会如何使用宏,但我发现了类似问题解决方案的示例代码,我认为它可能适用。我必须学习如何使用宏然后重新应用解决方案。
  • 按照我的建议做,记录宏。您复制的内容既无用也不相关。
  • 感谢 Cindy 的澄清,我录制了一个宏并用它替换了旧的“可能的代码”部分。

标签: hyperlink ms-word find-replace word-field


【解决方案1】:

试试:

Sub Demo()
With ActiveDocument
  While .Hyperlinks.Count > 0
    .Hyperlinks(1).Range.InsertBefore .Hyperlinks(1).Address
    .Hyperlinks(1).Delete
  Wend
End With
End Sub

【讨论】:

  • 非常感谢Macropod!这几乎就是我要找的。我已经尝试过这个解决方案,您可以在子标题“对宏脚的响应”下的主要问题中看到我的 cmets
  • 哎呀,我复制了错误的代码块 - 最初我只是将你的代码块粘贴回去!我已酌情更新了主要问题。
  • 我发布的代码绝不会导致“丢失 '.com' 之后的 URL 的任何部分”。如果 url 是 google.com/intl/en_us/health/about,那么这就是我的代码将输出的内容。无论如何,我无法从您更新的问题中看到您实际上正在使用我发布的代码。如果您从一开始就说出您想要实现的目标,那也会真的很有帮助。您显然想添加 & 标签 - 这可以通过 .Hyperlinks(1).Range.InsertBefore "" & .Hyperlinks(1).Address & ""
  • 非常感谢Macropod!这就是我需要的!我很感激:D
猜你喜欢
  • 2018-02-16
  • 1970-01-01
  • 2014-11-13
  • 1970-01-01
  • 2012-02-13
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多