【发布时间】: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" & i + 1).Text
它说:编译错误:参数不是可选的并突出显示单词单元格。当我放置特定的单元格位置而不是 ImpactCells(i) 时,该代码有效。
任何帮助将不胜感激。建议更有效地执行此操作也很好,请记住,我无法修改 Word 表的布局方式。
【问题讨论】:
-
您只向
Cell提供 1 个参数(#,# 作为字符串),而它要求 2 个参数,这两个参数都是 Long 类型。如果您不想更改太多代码 - 您可以尝试创建一个数组(比如splitArr)并分配给Split(ImpactCell(i),","),然后像.Tables(9).Cell(splitArr(0),splitArr(1)).Range.Text一样使用它