Excel VBA填充表(ListObject)列,其中包含其他表列之间的操作结果

时间:2017-11-08 22:33:00

标签: excel vba excel-vba

在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)

感谢您的帮助。

2 个答案:

答案 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)