在Excel VBA中,我找不到一种方法来填充表(ListObjects)中的列(ListColumns),并使用索引号对表的两列或多列进行操作,而不是使用字符串中的标题。例如,我知道这在使用时有用:
lo.ListColumns("Spread").DataBodyRange = "=[Current]-[Historic]"
但是说“Spread”是第10列,“Current”是第5列,“Historic”是第7列。有没有办法像下面那样填充列?我知道这不起作用,但我希望有类似的东西,因为我尝试了各种方法,但无法在搜索中找到它。
lo.ListColumns(10).DataBodyRange = lo.ListColumns(9).DataBodyRange - _
lo.ListColumns(10)
感谢您的帮助。
答案 0 :(得分:2)
lo.ListColumns(10).DataBodyRange = "=[" & lo.ListColumns(5).Name & "]-[" & lo.ListColumns(7).Name & "]"
答案 1 :(得分:0)
是否有特定原因要使用INDEX而不是列标题?使用硬编码的索引号并不能生成健壮的代码...这意味着如果您(或其他人)稍后更改了表的布局,则必须通过代码并修改这些硬编码的引用。这正是ListObject引用旨在避免的(无论是在VBA还是公式方面)。
使用Column标头要好得多,就像在您的示例中一样。如果有人更改列名,则设置命名范围以指向相关的ListColumns,并在代码中引用这些命名范围。
如果您想要做的只是出于某种原因找到INDEX号码,那么就这样做:
Dim lo as ListObject
Dim lc as ListColumn
On Error Resume Next
Set lc = lo.ListColumns("sName")
On Error GoTo 0
...然后你可以测试它是否被发现
If Not lc Is Nothing Then Msgbox(lc.Index)