第一个问题,请问这个问题是否已经解决,但我已经彻底搜索并找不到答案:
我已将几个命名范围链接到一个 Word 文档中。此 Word 文档(以及带有命名范围的相关 Excel 工作簿)是一个模板:它供同事制作这些模板(Word 文档和 Excel 工作簿)的许多副本。
我想在单词文档中包含一个命令按钮,单击该按钮时,将更新链接的命名范围的源。具体来说,我希望它将与 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 工作表(我不希望它这样做)。关于如何/为什么它不喜欢命名范围有什么想法吗?
谢谢,
马克
UPDATE:在 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 字段(链接对象,或更技术地说,“wdfield链接” https://msdn.microsoft.com/en-us/library/office/ff192211.aspx)。然后,我在预设的书签位置添加了 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 似乎不喜欢“更新”文件路径+名称。
只是为了让那些不知道的人(比如我)现在知道了。抱歉更新时间太长,我只是想彻底更新。