【发布时间】:2016-12-06 16:14:24
【问题描述】:
第一个问题,如果已经解决了,请原谅,但是我已经彻底搜索了,找不到答案:
我已将几个命名范围链接到一个 word 文档中。此 word doc(以及具有命名范围的相关 excel 工作簿)是一个模板:它适用于将制作这些模板(word doc 和 excel 工作簿)的许多副本的同事。
我想在 word doc 中包含一个命令按钮,单击该按钮将更新链接命名范围的源。具体来说,我希望它将与 worddoc 同名的工作簿设置为源。
问题是它不喜欢我输入的命名范围。我得到了:
运行时错误“6083”:此文档中的对象包含指向无法找到的文件的链接。链接信息不会更新。`
但是,我已经四倍检查了我的 excel 文档,命名范围存在。而且,当我在 word 中按 Alt+F9 时,我清楚地看到链接包含命名范围!
{LINK Excel.Sheet.8 C:\Users\Marc\Documents\WIP_SSS.xlsm CED \a \p}
这是我的代码:
Public Sub ChangeSource()
Dim filename As Variant
Dim fieldcount As Integer
Dim x As Integer
filename = Left(Application.ActiveDocument.Name, Len(Application.ActiveDocument.Name) - 4) & "xlsm"
fieldcount = ActiveDocument.Fields.Count
For x = 1 To fieldcount
'Debug.Print ActiveDocument.Fields(x).Type
If ActiveDocument.Fields(x).Type = 56 Then
ActiveDocument.Fields(x).LinkFormat.SourceFullName = ActiveDocument.Path & "\" & _
filename & "!CED"
End If
Next x
End Sub
如果我根本不输入命名范围,宏会起作用,但它会嵌入整个 Excel 工作表(我不希望它这样做)。关于它如何/为什么不喜欢命名范围的任何想法?
谢谢, 马克
更新: 在 Bibadia 的帮助下,我找到了解决方案;另外,我想记录一下 Word VBA 表现出的一些奇怪行为:
首先,解决方案代码:
Public Sub ChangeSource()
Dim filename As Variant
Dim fieldcount As Integer
Dim x As Integer
filename = ThisDocument.Path & "\" & Left(Application.ActiveDocument.Name, Len(Application.ActiveDocument.Name) - 4) & "xlsm"
fieldcount = ActiveDocument.Fields.Count
For x = 1 To fieldcount
On Error Resume Next
If ActiveDocument.Fields(x).Type = 56 Then
ActiveDocument.Fields(x).Delete
End If
Next x
ActiveDocument.Bookmarks("R1").Range.InlineShapes.AddOLEObject filename:=filename & "!Range1", LinkToFile:=True
End Sub
我首先删除了所有类型为 56 的字段(链接对象,或者更专业地说,"wdfieldlinked")。然后,我在预设的书签位置添加了 OLEObjects。
有趣的是,正如 Bibadia 所说,关键是输入LinkToFile:=True 代码。如果它是嵌入的,Word 似乎不会接受该对象:如果我删除该行,我会收到错误 Word Cannot obtain the data for the C:\...\document!NamedRange link.
最后,我发现了另一种奇怪的行为:尝试简单地替换链接时,使用此代码,
ActiveDocument.Fields(1).LinkFormat.SourceFullName = filepath+name & _
"!CED" 'that is the named range
当我更改 word 文档和 excel 工作簿的文件名时,它会工作一次(有关上下文,请参阅原始消息)。因此,当新的文件路径+名称与现有的文件路径+名称不匹配时,Word VBA 接受了更改。但是,一旦最初更新,如果我再次尝试运行宏,我会得到:
运行时错误“6083”:此文档中的对象包含指向无法找到的文件的链接。链接信息不会更新。
即使我在同一个工作表(显然是同一个工作簿)中将命名范围更改为另一个命名范围,我也会收到此错误。因此,当文件路径+名称不变时,Word VBA 似乎不喜欢“更新”文件路径+名称。
让以前不知道的人(比如我)现在都知道了。很抱歉更新了这么久,我只是想彻底。
【问题讨论】: