Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 自动更新链接_Vba_Ms Office_Ms Word - Fatal编程技术网

Vba 自动更新链接

Vba 自动更新链接,vba,ms-office,ms-word,Vba,Ms Office,Ms Word,有没有办法为超链接应用“自动更新”样式 我相信,这个问题并非微不足道 当你通常点击超链接时,它会将其颜色变为紫色。接下来,如果保存、关闭然后重新打开文档,链接将更新回蓝色。这是Word的默认行为,不需要使用任何宏 我试图用VBA复制这种行为。代码如下: Sub Test1() Selection.Range.Hyperlinks(1).Range.Fields(1).Result.Style = Word.WdBuiltinStyle.wdStyleHyperlinkFollowed E

有没有办法为超链接应用“自动更新”样式

我相信,这个问题并非微不足道

当你通常点击超链接时,它会将其颜色变为紫色。接下来,如果保存、关闭然后重新打开文档,链接将更新回蓝色。这是Word的默认行为,不需要使用任何宏

我试图用VBA复制这种行为。代码如下:

Sub Test1()
    Selection.Range.Hyperlinks(1).Range.Fields(1).Result.Style = Word.WdBuiltinStyle.wdStyleHyperlinkFollowed
End Sub
要使其工作,只需将插入符号放入链接,运行宏,然后查看结果:

这可以正常工作,但在保存、关闭然后重新打开文档后,这些已访问的链接不会自动更新。请参见下图中的差异。“谷歌”链接正常打开,使用鼠标Ctrl键点击;使用宏打开了链接“StackOverflow”:

正如我已经说过的,我想让我的VBA开放链接(StackOverflow)也可以自动更新(就像Google一样)

是的,我知道,有一个解决方法-只需创建另一个宏,它将在每次打开文档时启动,并将所有紫色超链接更改回蓝色。然而,这只是权宜之计,我不喜欢。使用它,我们使用从“永久紫罗兰色”到“永久蓝色”的转换,而不是使用“临时紫罗兰色”(也就是说,无需任何额外的努力即可自动更新)

希望一切都清楚。提前谢谢

更新(在已发布多个答案后添加)

是的,我理解,这将起作用:

Sub Test1()
    On Error Resume Next 'To avoid an error in case if the link isn't reachable
    Selection.Hyperlinks(1).Follow
End Sub

但我只想模拟以下内容,而不在浏览器中真正打开链接。这就是为什么,我不能使用
选择。超链接(1)。跟随

您需要删除该行,该链接将在跟随后更改,并在重新打开文档后更改

Selection.Range.Hyperlinks(1).Range.Fields(1).Result.Style = Word.WdBuiltinStyle.wdStyleHyperlinkFollowed
这是为我做的

Sub resetHyperlinks()

    Dim hLink As Hyperlink

    For Each hLink In ActiveDocument.Hyperlinks
        hLink.Address = hLink.Address        ' this works
 '      hLink.ScreenTip = hLink.ScreenTip    ' this works also

    Next hLink


End Sub

您不需要使用代码更改样式来使链接变为紫色。只需使用
Follow
方法即可。这将单击链接并将其变为紫色,然后在再次打开文档时将其重置为蓝色

Sub Test1()
    Selection.Range.Hyperlinks(1).Follow
End Sub

可以使用启动时运行的VBA代码重置链接样式,即是中的一部分

没有任何
.visted
属性或任何相关内容(即,您甚至无法查看它是否已被访问),因此除了
.Follow()
之外,没有其他方法可以打开链接

  • 您基本上是在试图伪造文档提供的有关其状态的信息:使链接在实际未被访问时显示为已被访问
  • 该类甚至不提供属性,这意味着Word的设计者不认为访问状态是编辑器功能的一部分(即,就程序的工作而言,它实际上是不存在的)。
这一证据表明,Word没有,也不是专门设计用来切换链接状态的工具,除了
。Follow()
,这意味着,您发现的任何能够产生预期效果的方法都必然是您所称的“变通方法”。

临时方法后续超链接的颜色是内置超链接字符样式的嵌入(不可直接访问)功能。它不是通过普通UI的样式工具公开的,也不是通过对象模型公开的

使用Word文档窗口中的“显示格式”窗格(Shift+F1),可以轻松比较两个选择之间的所有格式

如果将正常跟随的超链接与受代码段影响的超链接进行比较,您将看到跟随的超链接仍然具有超链接样式,而模拟跟随更改了第二个超链接的样式

如果比较从不跟随的超链接和通常跟随的超链接,Word将其格式标识为完全相同。Word不承认格式的任何方面(样式、字体颜色等)已更改

您正在使用的
Word.WdBuiltinStyle.wdStyleHyperlinkFollowed
似乎明确地存在以解决这个差距(这有点令人失望)

我建议使用您现有的方法,然后在由文档的
保存前
关闭前
事件触发的过程中恢复样式。使用这些事件将完全阻止后续样式的保存,从而避免由于有人在未启用宏的情况下打开文档而导致的问题

Option Explicit

Sub test()
 Dim HL As Hyperlink
 For Each HL In Sheet1.Hyperlinks
   HL.Range.Style.Font.Color = vbBlue    
 Next
End Sub

你不能简单地把它做成你想要的任何颜色而不调用它吗。正如上面其他人所说的,我认为无论你做什么,都将是一种变通方法,因为它不是预期的功能。

我的错。我原来的帖子里的代码有点错误。我编辑了它。这一行是什么使颜色保持以下链接颜色。如果删除它并通过宏跟随链接,就像原始示例代码一样,它将更改为跟随的颜色。关闭文档并重新打开,它将恢复为蓝色。当你这样做的时候,你正在设置链接的样式,word会将其写入xml,这样当它重新打开时,它可以再次应用它。是的,我理解你所说的一切。关键是,在现实生活中,宏应该只模拟打开,而不是在浏览器中真正打开。但是,我想尽可能地模拟“真正的开放”。我目前的方法(使用
Word.WdBuiltinStyle.wdStyleHyperlinkFollowed
)不够接近,因为它具有“永久性”,而不是“临时性”。然后,您可以放置一个宏,比如关闭,然后更改回超链接样式。我想这就是MS正在做的,因为在选项中有一个重置超链接的选项。你是指我原来帖子底部提到的解决方法吗?你的意思是什么?有一个选项“在打开时更新自动链接”,但即使禁用,链接也会不断更新。if也会打开超链接,OP没有提到他们是否想要。他说“我想要”