Word VBA中为批注添加超链接及多批注宏锚点异常问题求助
Word VBA中为批注添加超链接及多批注宏锚点异常问题求助
嘿各位,我最近在做Word的VBA宏,想实现快速插入带来源超链接的常用批注——就是批注里有固定文本,其中的“来源”部分要加超链接指向原文地址。
最开始我写了这段代码,但发现根本没法把超链接加到批注里:问题出在ActiveDocument.Hyperlinks.Add,它总是操作文档的正文选区,而不是我刚创建的那个批注对象,完全达不到预期效果:
Sub new_comment() ' ' new_comment Macro ' ' Selection.Comments.Add Range:=Selection.Range, Text:= _ "This is my text." ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _ "https://google.com" _ , SubAddress:="", ScreenTip:="", TextToDisplay:="This is my source" End Sub
我还试过手动操作然后录制宏,结果录制出来的宏根本没记录我编辑批注的步骤,白忙活一场...
更新
后来用了Tim给的解决方案,一开始单宏运行完全没问题!但当我把这个逻辑复制成多个宏(对应不同的预设批注内容)后,新的坑出现了:每次运行后续的宏时,超链接的锚点都会跑到文档里第一个批注的内容里去。比如我按顺序运行new_comment、new_comment_1、new_comment_2这三个宏,new_comment_1和new_comment_2的超链接居然都加到第一个批注的文本里了,根本不是它们自己对应的批注!
现在我的代码是这样的:
Sub new_comment() Dim cmt As Comment Set cmt = Selection.Comments.Add(Range:=Selection.Range, _ Text:="This is my text. This is my source.") HyperlinkComment cmt, "This is my source", "https://google.com" End Sub Sub HyperlinkComment(cmt As Comment, linkText As String, URL As String) Dim p As Long, rng As Range Set rng = cmt.Range p = InStr(1, cmt.Range.Text, linkText, vbTextCompare) If p > 0 Then rng.SetRange Start:=p, End:=p + Len(linkText) cmt.Parent.Hyperlinks.Add Anchor:=rng, Address:=URL End If End Sub Sub new_comment_1() Dim cmt As Comment Set cmt = Selection.Comments.Add(Range:=Selection.Range, _ Text:="This is my second preset comment. This is my second source.") HyperlinkComment cmt, "This is my second source.", "https://www.wikipedia.org/" End Sub Sub new_comment_2() Dim cmt As Comment Set cmt = Selection.Comments.Add(Range:=Selection.Range, _ Text:="This is my third preset comment. This is my third source.") HyperlinkComment cmt, "This is my third source.", "https://www.un.org/en/" End Sub
有没有大佬能帮我看看这问题出在哪,该怎么修复这个锚点跑偏的情况呀?
备注:内容来源于stack exchange,提问作者pipo_exquis
相关产品推荐
相关产品推荐

