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
我正在使用 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