【问题标题】:Replace all text words with hyperlink list in word用word中的超链接列表替换所有文本单词
【发布时间】:2016-12-26 21:10:20
【问题描述】:

我有许多冗长的 Word 2010 文档,其中充斥着首字母缩略词,其中许多相同的首字母缩略词在所有这些文档中都很常见。我还有一个这些首字母缩略词的垂直列表,这些首字母缩略词在每个文档中以表格格式(在每个文档的末尾)采用超链接格式。

例如超链接列表:

AA1
AA2
AA3
...

我对 Word 2010 宏的经验很少,但想知道是否有可能有一个像这样工作的宏:

  1. 在任何给定的文档中,当我将光标放在列表顶部(即超链接内容为“AA1”的单元格)时,它会选择第一个单元格的内容,然后将其复制到剪贴板,然后使用超链接格式的单词“AA1”(假设它找到要替换的单词)对文档中的所有文本格式单词“AA1”进行全局替换(我想使用 ^c)。

  2. 然后它会向下移动到具有“AA2”超链接内容的第二个单元格,并用超链接“AA2”值等替换文档中的所有“AA2”文本,直到超链接中的所有超链接单词list 已经替换了文档中的所有文本单词。

这可行吗?

【问题讨论】:

    标签: vba text replace hyperlink ms-word


    【解决方案1】:

    如果我理解你的意思是正确的 [问题不清楚和直观] 这是你需要的基本代码:

    Sub replaceHyperLink()
    Dim searchText As String
    searchText = "AA1"
        Selection.Find.ClearFormatting
        With Selection.Find
            .text = ""
            .Replacement.text = ""
            .Forward = True
            .Wrap = wdFindStop
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchKashida = False
            .MatchDiacritics = False
            .MatchAlefHamza = False
            .MatchControl = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
    
    Do
        With Selection.Find
        .text = searchText
        End With
    
        Selection.Find.Execute
    If Selection.Find.Found = True Then
        ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
            "stackoverflow.com/", SubAddress:="", ScreenTip:="", TextToDisplay:=searchText
    Else
    Exit Do
    End If
    Loop
    End Sub
    
    • 您必须循环执行 AA2、AA3、....
    • 如果您只想超链接表格的一列,请选择 列,然后将其复制到新文档中(这样做的代码很简单) 然后执行操作并再次将其粘贴到选定的列中。

    如果你想从单元格中获取文本:

    Dim cellText As String
    For i = 1 To ActiveDocument.Tables(1).Rows.Count
    ActiveDocument.Tables(1).Rows(i).Cells(3).Select
    cellText = Selection.text
    'do what you want with text
    Next i
    

    【讨论】:

    • Solivan - 非常感谢!我非常喜欢它!有没有办法让 searchText 不被硬编码为“AA1”,而只是将自己设置为光标所在单元格的值?我问的原因是我想将光标放在列中的顶部单元格上(在我的示例中,这将是“AA1”,但实际上它可以是任何东西(例如 AB1、AAA、ACK)并且一旦它执行您的代码,光标将向下移动到下一个单元格,使用它的值并进行替换等)。然后我可以将此通用表复制到任何已完成的文档中,运行宏以更新所有首字母缩略词。
    • 欢迎您。是的,可以使用简单的代码。查看编辑后的帖子
    • 我有一个类似的脚本,我正在尝试调试(下半部分) Sub replaceHyperLinkO ,replaceHyperLink Macro Dim cellText As String cellText = Selection.Text Selection.Copy Selection.Find.ClearFormatting 选择。找。 Replacement.Clea rFormatting With Selection.Find .Text = celiText .Replacement.Text = "lie" .Forward = True .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAIIWordForms = 假结尾
    • 下半场是.... 有选择。 Find .Text = cellText End With Do While Selection.Find.Found = True For i = 1 To ActiveDocument.Tables{I}.Rows.Count ActiveDocument.Tables{I}.Rows{i}.Cells{l}.Select Selection .Find.Execute Replace:=wdReplaceAII Next i Loop End Sub
    • 它几乎可以运行(在文档中全局替换与我的光标恰好位于表格列中的单元格值匹配的任何文本,效果很好),但作为一个新手,我无法获得循环为下一个“i”工作。不幸的是,我做了很多更改,我似乎无法调试这个烂摊子。想法?
    猜你喜欢
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多