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.