VBA Excel 使用数组元素引用 Word 文档中的单元格 table

VBA Excel Using an array element to reference a cell in a Word document's table

我正在使用 Excel 用户表单将表单中输入的数据推送到 Word 文档中。 Word 文档有几个 table,来自表单文本框控件的数据需要进入 Word 文档的特定单元格。 Excel 表单上有 15 个复选框和 15 个匹配的文本框,所以我认为处理它的最简单方法是使用数组,这样我就可以遍历它。

解决复选框(程序数组)不是问题,因为它们被命名为“chkbox1-chkbox15”并且在标记为 chkbox1-chkbox15 的 Word table 中有匹配的内容控件,因此循环工作正常。

问题出在文本框的文本上。数据需要进入的单元格到处都是,我没有改变 table 布局的奢侈。所以我想我会创建一个包含目标单元格的行和列位置的 15 元素数组。

这是我的代码的相关部分:

Dim ImpactCells(15) As String

'Specify Form cell locations for specific programs

ImpactCells(0) = "4,2"      'Program 1
ImpactCells(1) = "5,2"      'Program 2
ImpactCells(2) = "6,2"      'Program 3
ImpactCells(3) = "4,4"      'Program 4
ImpactCells(4) = "5,4"      'Program 5
ImpactCells(5) = "6,4"      'Program 6
ImpactCells(6) = "7,2"      'Program 7
ImpactCells(7) = "10,2"     'Program 8
ImpactCells(8) = "11,2"     'Program 9
ImpactCells(9) = "12,2"     'Program 10
ImpactCells(10) = "13,2"    'Program 11
ImpactCells(11) = "10,4"    'Program 12
ImpactCells(12) = "11,4"    'Program 13
ImpactCells(13) = "12,4"    'Program 14
ImpactCells(14) = "13,4"    'Program 15

For i = 0 To 14                                                                 'Count of Programs Array
        If Programs(i) <> "" Then                                               'If array element is not blank
            Set cc = .SelectContentControlsByTag("Program" & i + 1).Item(1)     'Select the Content Control with the Program(array index) tag
            cc.Checked = True                                                   'Check it
        End If
        If ImpactCount(i) <> "" Then
            'Code to populate cells here
            .Tables(9).Cell(ImpactCells(i)).Range.Text = Me.Controls("txtImpact" & i + 1).Text
        End If
    Next

导致错误的行是:

.Tables(9).Cell(ImpactCells(i)).Range.Text = Me.Controls("txtImpact" & i + 1).Text

它说:编译错误:参数不是可选的,并突出显示单元格一词。当我放置特定的单元格位置而不是 ImpactCells(i) 时,代码有效。

如有任何帮助,我们将不胜感激。有关更有效的方法的建议也很好,请记住我无法修改 Word table 的布局方式。

Cell 需要一个行和一个列参数(均为数字)。您正在传递单个字符串参数。

您可以尝试这样的操作:

Dim arr
'...
'...
If ImpactCount(i) <> "" Then
    'Code to populate cells here
    arr = split(ImpactCells(i),",") 'convert to array
    .Tables(9).Cell(arr(0), arr(1)).Range.Text = _
                  Me.Controls("txtImpact" & i + 1).Text
End If