我有许多大型的 Microsoft Word 文档,其中包含来自许多 Microsoft Excel 电子表格的许多链接文件。当打开Word文档时,即使未选中“打开时更新链接的文件”选项,也未选中:
Word仍然通过打开和关闭每个单独链接的相关excel电子表格从源头检查(因此对于x个链接,即使来自同一电子表格,Word也会打开和关闭电子表格x次)。这意味着打开文档需要很长的时间。
我发现,如果包含链接对象源的电子表格已经打开,则文档打开速度会更快,因此Word不会一直打开,关闭和重新打开它们。
到目前为止,我所拥有的解决方案的起点是创建链接对象的所有文件路径的列表,方法是按照 VBA 代码进行操作:
Sub TypeArray()
Dim List(), Path As String
Dim i, x As Integer
Dim s As InlineShape
Dim fso As FileSystemObject, ts As TextStream
Set fso = New FileSystemObject
Set ts = fso.OpenTextFile("C:\MyFolder\List.txt", 8, True)
With ts
.WriteLine (ActiveDocument.InlineShapes.Count)
End With
For Each s In ActiveDocument.InlineShapes
Path = s.LinkFormat.SourcePath & "\" _
& s.LinkFormat.SourceName
With ts
.WriteLine (Path)
End With
Next s
End Sub
'--------------------------------------------------------------------------------------
Private Sub WriteStringToFile(pFileName As String, pString As String)
Dim intFileNum As Integer
intFileNum = FreeFile
Open pFileName For Append As intFileNum
Print #intFileNum, pString
Close intFileNum
End Sub
'--------------------------------------------------------------------------------------
Private Sub SendFileToNotePad(pFileName As String)
Dim lngReturn As Long
lngReturn = Shell("NOTEPAD.EXE " & pFileName, vbNormalFocus)
End Sub
效果很好,但是只能在文档打开后使用,这违背了它的目的。
所以,最后,我的问题是:
1)在打开Word文档并等待从源头检查每个链接的漫长过程之前,有没有办法运行此代码(或任何更好,更高效的代码-欢迎提出建议)?
2)有没有一种方法可以避免所有这些问题,并且在打开文档时让Word 而不是检查链接?
抱歉,很长的问题,谢谢您的帮助!
最佳答案
如果我没记错的话,根据msdn应该有Document_Open事件。这实际上应该是一个打开前的文档,应该在更新链接之前被触发(至少在excel中,它是在计算之前被触发的)。
尝试打开文档上的文件打开。然后,您将面临另一个问题,以至于何时关闭文件,但这是一件容易得多的事情。 (可能是document_close事件...)
编辑:
正如评论所言,现在为时已晚。您可以创建开词器(作为单个应用程序或外接程序)。逻辑基本上是:
'1) on something_open run GetOpenFileName dialog
'2) before opening the real thing, open all files accompanied
'3) open the document itself
'4) close all files
'5) close the opener itself
这不是最简单的方法,但是我使用此逻辑进行示例以确保我的应用程序始终在excel等的新副本中运行。但是我知道这是一种解决方法,而不是解决方案。
关于VBA文档中链接对象的文件路径列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20838569/