I too have pondered this question and searched and searched without finding a really good answer
Finally today the penny dropped and I found something which I would like to share to help those following with the same question that was bugging me.
In brief the question was: how to reference the rows of a table in vba using the standard names of the parts of a table. It turns out to be quite easy. You can refer to particular rows of the table and call the columns by their true name without the need to redefine any further variables.
The construct is like this: Range("TableName[ColumnName]")(RowNumber)
where TableName and ColumnName are the standard table and column names from Excelside, and RowNumber is the simple integer index of the row number from 1 to Range("Table1").Rows.Count
For a two column table called Table1 with columns called ID and Data you can loop through the table elements using this construction
For Rw = 1 To Range("Table1").Rows.Count
MsgBox(Range("Table1[ID]")(Rw) & "has value" & Range("Table1[Data]")(Rw) )
Next Rw
This keeps to very similar constructs to those used in Excel and requires no extra naming. And it is so very readable! You can also append the appropriate range modifiers such as .Text, .Value, .Formula etc after that (Rw) part as needed.
Note that if you have a single row table (eg for parameters), or wish to refer to the first row of a larger table, you can skip the (Rw) bit and use the Range directly. So a Table called Params with columns called Colour, Size and Height can be referred to using Range("Params[Colour]") or Range("Params[Height]") etc. Don't you like that? :-)
This discovery has really hooked me on Tables. They now provide for me a very tidy link between vba and the sheets in a readable and compatible way.
Thank you Microsoft!
Bob JordanB