Excel VBA填充表(ListObject)列与其他表列之间的操作结果

在Excel VBA中,找不到在表(ListObjects)中填充列(ListColumns)中的列(ListColumns)的方法,使用索引编号在两个或多个表的列上进行操作,而不是使用string中的标题。 所以,例如,我知道这个工程时使用:

lo.ListColumns("Spread").DataBodyRange = "=[Current]-[Historic]" 

但是说“Spread”是第10列,“Current”是第5列,“Historic”是第7列。有没有办法像下面那样来填充列? 我知道这是行不通的,但我希望有类似的东西,因为我已经尝试了各种方法,不能在search中find它。

 lo.ListColumns(10).DataBodyRange = lo.ListColumns(9).DataBodyRange - _ lo.ListColumns(10) 

谢谢您的帮助。

 lo.ListColumns(10).DataBodyRange = "=[" & lo.ListColumns(5).Name & "]-[" & lo.ListColumns(7).Name & "]" 

是否有一个特定的原因,你要使用一个INDEX而不是列标题? 使用硬编码的索引号不能提供可靠的代码…这意味着如果您(或其他人)稍后更改了表格的布局,则必须通过代码并修改这些硬编码的引用。 这正是ListObject引用被devise为避免(在VBA和公式方面)的原因。

使用Column标题要好得多,就像在你的例子中一样。 如果有人有机会改变列名,那么设置一个命名范围来指向相关的ListColumns,并在代码中引用这些命名的范围。

如果你想要做的就是findINDEX号码,那么只需要做这样的事情:

 Dim lo as ListObject Dim lc as ListColumn On Error Resume Next Set lc = lo.ListColumns("sName") On Error GoTo 0 

…然后你可以testing它是否被发现

 If Not lc Is Nothing Then Msgbox(lc.Index)