繁体   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