2013-08-28 104 views
3

我試圖通過將數據放入電子表格並鏈接到Word中相應的單元格來自動更新3個不同Word文檔中的某些信息(例如名稱,日期和數字)。電子表格中包含一些宏,可以在內部自動更新部分電子表格。從Excel VBA更新Word文檔中的鏈接字段

一切工作正常,除了更新Word文檔中的鏈接。 當試圖更新Word中的鏈接並右鍵單擊它並選擇「更新鏈接」選項時,它會爲電子表格提出宏警告對話框,詢問我是否要激活宏。它不會只做一次,而是會在20多秒左右的更新過程中持續進行(這對我來說似乎非常長)。因此,更新鏈接工作,但只有當你願意點擊幾十次「激活宏」按鈕。

我試圖用Word自動更新文檔中的所有字段與VBA,但也有同樣的問題,它也持續半分鐘帶來宏對話框。 這裏是我的代碼:

Sub UpdateFields() 
    ActiveDocument.Fields.Update 
End Sub 

我也試圖直接從電子表格更新的Word文檔,但是,不能正常工作,因爲當Excel試圖通過VBA打開一個Word文檔的程序停止執行,並導致此錯誤:

「Excel正在等待另一個應用程序來完成OLE操作」。

單擊確定並等待不起作用,因爲幾秒鐘後會再次出現錯誤消息,並且停止它的唯一方法是手動終止Excel進程。

這裏是我的Excel宏代碼:

Sub LoopThroughFiles() 
    Path = Application.ActiveWorkbook.Path 
    Dim WordFile As String 
    WordFile = Dir(Path & "\*.doc") 
    Do While Len(WordFile) > 0 
     Run Update(Path & "\" & WordFile) 
     WordFile = Dir 
    Loop 
End Sub 

Function Update(Filepath As String) 

    Dim WordDoc As Word.Document 
    Set WordApplication = CreateObject("Word.Application") 
    Set WordDoc = WordApplication.Documents.Open(Filepath) 'This produces the error 

    ActiveDocument.Fields.Update 

End Function 

注意,文件夾中的文件只有3個文檔和電子表格,程序確實發現文件沒有任何問題。

我在網上搜索瞭解決方案,但是我沒有真正找到任何東西,我發現這很奇怪,因爲這似乎是一個人會用VBA做的很常見的事情。 然後,我對VBA幾乎沒有什麼經驗,所以我可能完全忽略了這一點,並且有一個我只是不知道的超級簡單解決方案。

+0

程序無法找到這些文件,除非您在此代碼中輸入了拼寫錯誤,因爲'儘管Len(StrFile)> 0'應該是'Do While Len(WordFile)> 0'。未聲明的變量還有其他一些潛在的問題,但我不指望這些會導致錯誤。無論如何,我會看看如果我能想出它:) –

+1

我實際上在我的程序中使用StrFile作爲變量名稱,當我在此處發佈它時我更改了名稱,因爲我想讓它更容易理解,並且忘記更改線。所以不幸的是,這不是問題。 –

+0

我已經更新了上面的代碼,WordFile現在一直使用。感謝您指出。 –

回答

2

我想我看到錯誤,這是一個沉默的失敗,因爲文件包含鏈接,有一個開放的對話框等着你說「是」或「否」來更新鏈接。

我們可以通過禁用自動鏈接更新來禁止此對話框(WordApplication.Options.UpdateLinksAtOpen = False)。

Function Update(Filepath As String) 
    Dim WordApplication As Word.Application 
    Dim WordDoc As Word.Document 
    Dim updateLinks As Boolean 

    Set WordApplication = CreateObject("Word.Application") 
     updateLinks = WordApplication.Options.UpdateLinksAtOpen 'capture the original value 
     WordApplication.Options.UpdateLinksAtOpen = False  'temporarily disable 

    Set WordDoc = WordApplication.Documents.Open(Filepath) 
     WordDoc.Fields.Update 
     'MsgBox "Links updated in " & WordDoc.Name 
     '## Save and Close the Document 
     WordDoc.Save 
     WordDoc.Close 

    '## reset the previous value and Quit the Word Application 
    WordApplication.Options.UpdateLinksAtOpen = updateLinks    ' 
    WordApplication.Quit 

End Function 

還有,記得保存並關閉文檔,並退出函數內部的Word應用程序。

我做了這個其他修改:

在你的函數,ActiveDocument不是在Excel中的對象,所以你需要限定它,否則該行也將拋出一個錯誤。我只是簡單地參考您已經分配的WordDoc,而不是參考WordApplication.ActiveDocument

+0

作品!非常感謝您的快速回答。此外,我想知道是否可以設置一個文檔,不要求每次打開鏈接時更新鏈接(我的意思是,在啓動時不運行宏)。 –

+0

我不知道這是否可能;不幸的是,Word不是我的專業領域。 –

+0

沒問題,並且非常感謝您的幫助。 –

相關問題