【问题标题】:VBA Excel Using an array element to reference a cell in a Word document's tableVBA Excel 使用数组元素引用 Word 文档表格中的单元格
【发布时间】:2021-10-16 00:44:39
【问题描述】:

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

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

问题在于文本框的文本。数据需要进入的单元格到处都是,我没有改变表格布局的奢侈。所以我想我会创建一个包含目标单元格的行和列位置的 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" &amp; i + 1).Text

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

任何帮助将不胜感激。建议更有效地执行此操作也很好,请记住,我无法修改 Word 表的布局方式。

【问题讨论】:

  • 您只向 Cell 提供 1 个参数(#,# 作为字符串),而它要求 2 个参数,这两个参数都是 Long 类型。如果您不想更改太多代码 - 您可以尝试创建一个数组(比如splitArr)并分配给Split(ImpactCell(i),","),然后像.Tables(9).Cell(splitArr(0),splitArr(1)).Range.Text一样使用它

标签: arrays excel vba ms-word


【解决方案1】:

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

【讨论】:

  • 对 ImpactCells 数组进行更改会更有效吗?创建数组只是为了将其拆分得更远似乎很奇怪?
  • 解决这个问题只需要2行代码,我觉得还是蛮合理的。如果你想改变这似乎不是更有效的@Anthony
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多