2014-04-17 109 views
1

我有一個從Excel運行的VBA宏,用於從Word文檔導入一些信息。在我開始解析之前,我想擺脫目錄和其他字段。下面的代碼(剝離到最低限度)適用於Office 2010,但不適用於Office 2013.我收到「對象字段中的方法刪除失敗」 eror消息,但我不明白爲什麼。刪除Word字段VBA不能在Word 2013中工作,在Word 2010中工作

感謝您的任何提示!

Sub ImportBOD() 

    Dim wdFileName As Variant 
    Dim WordApp As Object 

    Dim wdDoc As Word.Document 

    Dim fld As Word.Field 


    wdFileName = Application.GetOpenFilename("Word files (*.docx),*.docx", ,"Choose the Word document") 

    If wdFileName = False Then Exit Sub '(user cancelled import file browser) 

    Set WordApp = CreateObject("Word.Application") 

    Set wdDoc = WordApp.Documents.Open(wdFileName, ReadOnly:=True) 

    'Get rid of table of contents and other fields 
    For Each fld In wdDoc.ActiveWindow.Document.Fields 
     fld.Delete 
    Next 


    wdDoc.Close SaveChanges:=wdDoNotSaveChanges 

End Sub 
+0

。看到下面的回答+我的評論。 –

回答

1

不得不試圖通過索引而不是刪除它們?

For i = 1 to wdDoc.ActiveWindow.Document.Fields.Count 
    wdDoc.ActiveWindow.Document.Fields.Item(i).Delete 
Next i 

我有時發現,在循環在這種情況下fld去除活動對象並不總是成功的,VBA錯誤消息小於具體。此外,似乎SEQ(序列字段)和XE(IndexEntry字段)不能是Unlink ed,這向我暗示Delete可能會失敗,儘管微軟沒有指定這種情況。

編輯

基於評論刪除,你應該從最後一個項目去收集先當最後一個循環到第一

For i = wdDoc.ActiveWindow.Document.Fields.Count To 1 Step -1 
    wdDoc.ActiveWindow.Document.Fields.Item(i).Delete 
Next i 
+0

好主意,但刪除時,從最後到第一項運行你的循環... –

+0

@KazJaw更新與最後到第一個循環 – engineersmnky

+0

感謝您的建議,不幸的是我得到同樣的錯誤。然而,我做了一個解決方法:我使用了Unlink而不是Delete,這對我的目的來說沒什麼問題。我想擺脫田野的原因是,當我試圖按段落處理文檔時,遇到了問題,即逐段循環遍歷文檔。這些字段以某種方式干擾了處理,但是將它們轉換爲與Unlink相關的文本是有用的 – bbSTO