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()进行了测试。
答案 0 :(得分:0)
评论的答案。我不知道的问题是,在运行模块后,书签已被删除,因此除非再次创建书签,否则书签将无法再次使用。
您确定书签bd1 ... bd4仍在文档中吗?由于书签的range.text会删除书签,因此,如果您希望能够重复书签文本的分配,则必须在分配文本后重新创建书签。 FWIW我运行了您的代码,当bd1..bd2等存在时很好,但是下次又扔了5941。 (这是一个很常见的问题!)– 9月3日8:37有点狡猾
因此,要正式回答我的问题,我最初做的方式是如何;只是无法重复。