如何通过遍历数组来更改多个书签的文本?

时间:2020-09-03 08:06:03

标签: vba syntax ms-word

Sub initialize()

    For boxNum = 1 To 10
        vaultValuesForm.Controls("h" & boxNum).Value = ""
        vaultValuesForm.Controls("d" & boxNum).Value = ""
    Next boxNum
    
    vaultValuesForm.Show
        
End Sub
Sub button_Populate_Click()

    Dim array_h(9) As String, array_d(9) As String
    
        For boxNum = 0 To 9
            array_h(boxNum) = vaultValuesForm.Controls("h" & (boxNum + 1)).Value
            array_d(boxNum) = vaultValuesForm.Controls("d" & (boxNum + 1)).Value
        Next boxNum
        
        Call populateTable(array_h(), array_d())
        
End Sub
Sub populateTable(array_0() As String, array_1() As String)

        For x = 1 To 4
            ThisDocument.Bookmarks("bd" & x).Range.Text = array_0(0)
        Next x
        
End Sub

我已经在各个方面测试了此代码的功能,并且直到这一行为止,它都可以正常工作:

ThisDocument.Bookmarks("bd" & x).Range.Text = array_0(0)

具体来说,直到达到= array_0(0)。在其当前状态下,达到Sub的这一点将导致“运行时错误'5941':所请求的集合成员不存在”。当我最初尝试使用= array_0(x)时,这是同一笔交易(这最终是我要实现的目标)。但是,如果将其替换为诸如= "AA"之类的直接名称,它将起作用。我如何正确地表达这一点,以将书签值设置为数组中的值?

注意:如果您想知道,数组将被正确引用和传递;我通过将循环更改为注释并对各种数组元素使用MsgBox()进行了测试。

1 个答案:

答案 0 :(得分:0)

评论的答案。我不知道的问题是,在运行模块后,书签已被删除,因此除非再次创建书签,否则书签将无法再次使用。

您确定书签bd1 ... bd4仍在文档中吗?由于书签的range.text会删除书签,因此,如果您希望能够重复书签文本的分配,则必须在分配文本后重新创建书签。 FWIW我运行了您的代码,当bd1..bd2等存在时很好,但是下次又扔了5941。 (这是一个很常见的问题!)– 9月3日8:37有点狡猾

因此,要正式回答我的问题,我最初做的方式是如何;只是无法重复。