我有许多大型的 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/

10-12 00:32
查看更多