【问题标题】:Error 1004 with VBA code with bookmarks带有书签的 VBA 代码出现错误 1004
【发布时间】:2014-11-28 23:58:03
【问题描述】:

我正在使用宏在 Excel 中使用命名范围内的文本填充 Word 文档。 word 文档具有与命名的 excel 范围相对应的书签。我没有编写代码,而是从另一个来源复制它。

这个宏比我发布的 sn-p 还要多。如果有用的话,我可以发布其余的。我将大约一半的 Word 文档添加为书签,并且宏工作正常,然后突然停止工作。

我在下面突出显示的行中收到错误 1004。我是新手,所以我什至不太确定我应该寻找什么来解决这个问题。您可以提供的任何帮助将不胜感激!提前致谢!

附:如果相关,我使用的是 Word 和 Excel 2007

 'PASTE TEXT STRINGS LOOP
    n = 1
    For Each temp In BkmTxt
        p = p + 1
        Prompt = "Please wait. Copying text. Carrying out operation " & p & " of " & pcount & "."
        Application.StatusBar = Prompt

    'If The Bkmtxt(n) is empty then go to the next one, once that has been found do next operation.
    If BkmTxt(n) = Empty Then
        n = n + 1

    'should find match and work
    Else

        'You might want to use multiple copies of the same text string.
        'In this case you need to call the bookmark as follows: "ARTextWhatever_01"
        'You can use as many bookmarks as you want.
        BkmTxtSplit = Split(BkmTxt(n), "_")
        vValue = Range(BkmTxtSplit(0)).Text **<----- ERROR HERE**

        Set wdRng = wdApp.ActiveDocument.Bookmarks(BkmTxt(n)).Range
        If Len(sFormat) = 0 Then
            'replace the bookmark text
            wdRng.Text = vValue
        Else
            'replace the bookmark text with formatted text
            wdRng.Text = Format(vValue, sFormat)
        End If

        'Re-add the Bookmark
         wdRng.Bookmarks.Add BkmTxt(n), wdRng
         n = n + 1
    End If
Next

【问题讨论】:

  • 在我看来,BkmTxt 是一个双书签数组,数组的每个元素都包含两个由下划线连接的实际书签。或者,BkmTxt 可以是包含相同双书签名称的单元格区域。处理的方法各不相同。你能澄清一下吗?
  • 我不太确定我是否理解您的问题,但为了澄清,BkmTxtSplit 指的是在下划线处拆分书签,以便书签可以在 word 文档中的多个位置重复。例如,在这种情况下,word 文档中的一个书签直接对应于我的 excel 文档中的命名范围单元格“ARTextName”。在这种情况下,excel 中的命名范围单元格包含我的报告的标题。我想将报告标题放在 word 文档中的多个位置。为此,我插入标记为 ARTextName_01、ARTextName_02 等的书签。这有帮助吗?

标签: vba excel bookmarks


【解决方案1】:

第 1 步:不要从外部来源复制代码。使用外部资源作为学习工具,并尝试了解他们实际在做什么。

现在,如果我理解正确,您只需一个带有命名范围的 Excel 工作表,我假设其中已经包含信息,以及一个带有与命名范围完全匹配的书签的 Word 文档:

第 2 步:确保您在 excel 中有单词对象库引用

这里:

sub KeepItDoin()
    dim xlRange as Excel.Range
    dim wdApp as new Word.Application
    dim wdDoc as Word.Document
    dim wdBkm as Word.Bookmark

    set wdDoc = wdApp.Documents.Open( "Filepath" ) 'get filepath from where ever  

    for each wdBkm in wdDoc.Bookmarks
        set xlRange = Application.Range(wdBkm.Name)
        wdBkm.range.text = xlRange.Value
    next wdBkm
end sub

这可能会让你接近(没有测试,不在乎它是否有效。用它来学习)。这个想法是,如果书签与范围匹配,我们可以使用它们的名称在 excel 中查找范围,然后告诉 excel 将其中的数据移动到书签范围中。

您可能需要添加一些格式,或者创建一个表格,然后在范围内逐个单元格移动并填充表格,但由于您喜欢复制意大利面,因此我愿意这样做。

【讨论】:

    【解决方案2】:

    如果有人感兴趣,我想通了。我插入 Word 文档的书签出现错误。如果 word 文档包含与 Excel 中的范围不对应的书签,此宏将返回错误 1004。感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多