如何使用他的名称和列引用循环excel 2010表?

Tie*_*rcq 16 excel vba excel-vba excel-2010

从Excel 2010开始,我在Excel中使用了很多表.例如,我有一个表"tabWorkers"有3列:"ID","名字","姓氏".

我已经发现我可以使用[]来引用VBA中的表.例如:

Dim row As Range
For Each row In [tabWorkers].Rows
    MsgBox (row.Columns(2).Value)
Next
Run Code Online (Sandbox Code Playgroud)

这将为我提供每行有效的名字..但我希望通过使用它的列名来使其更具动态:

Dim row As Range
For Each row In [tabWorkers].Rows
    MsgBox (row.Columns("Firstname").Value)
Next
Run Code Online (Sandbox Code Playgroud)

当然,我可以进行某种查找,将列索引'2'绑定到类似FirstnameIndex的var,但我想要正确的语法.我确信它是可能的但是没有真正记录(比如[tabWorkers] .Rows)

Dou*_*ncy 18

我不太熟悉引用表的简写方法.如果你没有得到答案,你可能会发现这个使用ListOject模型的longhand方法很有用:

Sub ListTableColumnMembers()
Dim lo As Excel.ListObject
Dim ws As Excel.Worksheet
Dim lr As Excel.ListRow

Set ws = ThisWorkbook.Worksheets(2)
Set lo = ws.ListObjects("tabWorkers")

For Each lr In lo.ListRows
Debug.Print Intersect(lr.Range, lo.ListColumns("FirstName").Range).Value
Next lr
End Sub
Run Code Online (Sandbox Code Playgroud)


小智 8

试试这个:

Dim row as Range
For Each row in [tabWorkers[first name]].Rows
     MsgBox row.Value
Next
Run Code Online (Sandbox Code Playgroud)


小智 7

我也在思考这个问题,搜索和搜索,却没有找到一个非常好的答案

终于今天,便士掉了下来,我找到了一些我想分享的东西来帮助那些追随我的同样问题的人.

简而言之,问题是:如何使用表的各部分的标准名称来引用vba中表的行.事实证明这很容易.您可以引用表的特定行并按其真实名称调用列,而无需重新定义任何其他变量.

构造如下:Range("TableName [ColumnName]")(RowNumber)

其中TableName和ColumnName是Excelside中的标准表和列名,RowNumber是从1到Range("Table1")的行号的简单整数索引.Rows.Count

对于名为Table1的两列表,其中包含名为ID和Data的列,您可以使用此构造循环遍历表元素

For Rw = 1 To Range("Table1").Rows.Count
     MsgBox(Range("Table1[ID]")(Rw) & "has value" & Range("Table1[Data]")(Rw)    )
Next Rw
Run Code Online (Sandbox Code Playgroud)

这保持了与Excel中使用的结构非常相似的结构,并且不需要额外的命名.它非常易读!您还可以根据需要在该(Rw)部分之后附加适当的范围修饰符,例如.Text,.Value,.Formula等.

请注意,如果您有一个单行表(例如参数),或者希望引用较大表的第一行,则可以跳过(Rw)位并直接使用Range.因此,可以使用Range("Params [Color]")或Range("Params [Height]")等来引用名为Params的表,其中包含颜色,大小和高度的列.您不喜欢这样吗?:-)

这个发现真的让我迷上了桌子.他们现在以可读和兼容的方式为我提供了vba和表之间非常整洁的链接.

谢谢微软!

鲍勃乔丹B.