簡體   English   中英

更新文本后沒有保留一些特定的單詞書簽

[英]A few specific word bookmarks not being preserved after updating their text

因此,我正在嘗試使用 excel 電子表格來填充 word 模板。 .xlsm 文件中的命名范圍與單詞模板書簽名稱相同。 大多數運行得很好,但對於其中兩個,.bookmarks.add 方法失敗,沒有錯誤或警告,然后書簽丟失。 據我所知,這兩者並沒有什么特別或特別之處。 可能是什么原因?

有問題的書簽稱為“client_address2”(共 2 個)和“test_name2”(共 3 個)。

Sub preencher_word_2dd()
'Substitui os bookmarks do word pelo conteúdo do Bookmarks.xlsm
    Dim wdApp As Word.Application
    Dim wDoc As Word.Document
    Dim bmkwb As Workbook
    Dim bmk As Worksheet
    Dim nome_report As String
    Dim i As Integer
    
    Set bmkwb = ActiveWorkbook
    Set bmk = bmkwb.Sheets(1)
    
    'Get the running word application
    Set wApp = GetObject(, "Word.Application")

    'get report name to be updated
    nome_report = bmk.Range("project_number").Value & "_" & bmk.Range("report_number") & "_01 Overview.docx"
    
    'select the correct, already open, word document
    Set wDoc = wApp.Documents(nome_report)
    Debug.Print wDoc.Bookmarks.Count
    
    i = 1
    With wDoc
        For i = 1 To .Bookmarks.Count
            For Each nm In bmkwb.Names
                If .Bookmarks(i).Name = nm.Name Then
                    'On Error Resume Next
                    UpdateBookmark wDoc, .Bookmarks(i), nm.RefersToRange.Value
                    'On Error GoTo 0
                    Exit For
                End If
            Next nm
        Next i
        .Fields.Update
    End With
    Debug.Print wDoc.Bookmarks.Count
End Sub

Sub UpdateBookmark(wDoc As Word.Document, b As Word.Bookmark, TextToUse As String)
    Dim BMRange As Word.Range
    Dim BMName As String
    Dim n_bmks As Integer
    
    n_bmks = wDoc.Bookmarks.Count
    Set BMRange = b.Range
    BMName = b.Name
    BMRange.Text = TextToUse
    
    wDoc.Bookmarks.Add BMName, BMRange
    If n_bmks <> wDoc.Bookmarks.Count Then
        Debug.Print BMName, BMRange
        Debug.Print wDoc.Bookmarks.Count, "Bookmark lost"
    End If
End Sub

提前致謝!

您指的是書簽«稱為“client_address2”(2 個)和“test_name2”(3 個)»。 我假設它們被命名為“client_address1”、“client_address2”、“test_name1”、“test_name2”和“test_name3”,因為 Word 文檔不能有兩個或多個同名的書簽。

是否有任何書簽包含在另一個書簽內或與另一個書簽重疊? 如果是這樣,如果那些嵌入/重疊的書簽不再存在,這可能會導致您的“For i = 1 To.Bookmarks.Count”崩潰。 至於:

i = 1
With wDoc
    For i = 1 To .Bookmarks.Count
        For Each nm In bmkwb.Names
            If .Bookmarks(i).Name = nm.Name Then
                'On Error Resume Next
                UpdateBookmark wDoc, .Bookmarks(i), nm.RefersToRange.Value
                'On Error GoTo 0
                Exit For
            End If
        Next nm
    Next i
    .Fields.Update
End With

這都可以簡化為:

With wDoc
  For Each nm In bmkwb.Names
    If .Bookmarks.Exists(nm.Name).Name Then _
      Call UpdateBookmark(wDoc, .Bookmarks(nm.Name), nm.RefersToRange.Value)
  Next nm
  .Fields.Update
End With

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM