2017-06-02 78 views
2

衆多我遇到試圖運行下面的東西在VBA的Word時,一個神祕的問題時崩潰自動。 (其實,我的意圖有點不同,但我儘可能地打破了這個程序。)「Nummeriertes元素」的意思是「編號元素」。VBA試圖插入的CrossReferences

在296個元素之後,程序在Selection.InsertCrossReference命令中崩潰,出現非特定錯誤(運行時錯誤'4198':「Command Failed」)。如果我忽略錯誤並嘗試繼續,Word會崩潰,同時存在一個同樣不明確的「堆損壞」錯誤。

什麼也困擾我是,如果我重新啓動子,它將立即失敗,運行時錯誤'4198'。我必須完全重新啓動Word以便能夠再次運行Sub,然後它將再次在同一點(296個元素)中崩潰。似乎有些緩衝區已滿,直到我重新啓動Word纔會被清除,但這非常煩人(我在本文檔中有 300多條標題)。

我在這裏相當茫然,因爲我不太明白髮生了什麼事情,或者如何規避問題。有人知道發生了什麼或我做錯了什麼嗎?

+0

當然,項目#296可能有問題。添加或刪除段落時,交叉引用會變得不適。嘗試讀取損壞的參考可能會返回您遇到的錯誤。嘗試確定有問題的參考,並確定它是否有問題。 – Variatus

+0

我檢查了這個。如果我刪除了項目#296或從另一個項目開始,而不是從第一個項目開始,它會在另一個點崩潰。似乎與該項目本身無關。 – Nebr

回答

0

你所得到的錯誤的原因是你沒有你的文檔中"Nummeriertes Element"參考或許OR,更可能的是,你有你的文檔中295 "Nummeriertes Element"。當它試圖插入對"Nummeriertes Element"(296)的引用時,它會炸彈。通過一對夫婦相當快地砰的一聲轟炸可能只是Word的一個問題(我已經看到一些奇怪的事情發生在Word和.docm損壞)。不幸的是,你會得到那個可怕的錯誤,這意味着什麼都沒有。

Option Explicit 

Sub Test() 
    Dim allHeadlines As Variant 
    Dim doc As Document 
    Dim i As Integer 

    allHeadlines = ActiveDocument.GetCrossReferenceItems(wdRefTypeHeading) ' Gets all headlines 

    For i = 1 To UBound(allHeadlines) 
     Selection.InsertCrossReference ReferenceType:=wdRefTypeHeading, _ 
      ReferenceKind:=wdNumberRelativeContext, ReferenceItem:=i, _ 
      InsertAsHyperlink:=True, IncludePosition:=False, SeparateNumbers:=False, _ 
      SeparatorString:=" " 
    Next i 
End Sub 

這將交叉引用您的標題。當你指定你的ReferenceType"Nummeriertes Element"在後端(我假設),它正在做GetCrossReferenceItems(wdRefTypeNumberedItem),然後你指定你想通過序號wdNumberRelativeContext得到它,並試圖抓取GetCrossReferenceItems(wdRefTypeNumberedItem)(296),這是不存在的。

但是當你改變你的ReferenceTypewdRefTypeHeading將交叉參考的序號標題本身,而不是編號列表項。你可以下降然後str(i)只是i

希望它有幫助。

+0

謝謝你的回答。不幸的是,這並沒有改變任何事情。我複製了你的代碼,它在相同的位置產生了相同的錯誤。我也排除了它崩潰的項目可能是問題。雖然有趣的想法。 – Nebr

+0

我可能會嘗試重新安裝Office,如果您還沒有。我不得不在之前做一兩件令人沮喪的事情。不幸的是,它不適合你,因爲它對我有用。我們討論的文檔有多大? – GibralterTop

+0

另外,什麼版本的辦公室? – GibralterTop