4

这应该很简单,但我是 VBA 菜鸟。我已经阅读了很多论坛,发现除了过于复杂的代码,我无法破译以适应我的应用程序。

在 Excel 2007 中,我已经定义了一个表。由于我是论坛的新手,所以我无法发布图片,但该表有 3 列,标题行命名为 1 到 3,还有一个数据行,粗略如下所示:

Table1
+------+------+-------+
|1     |  2   |   3   |
+------+------+-------+
|Alpha |Bravo |Charlie|
+------+------+-------+

使用这个简单的表,以下工作,并返回文本“Alpha”。

Sub works()

    Dim item As String

    Sheets("Sheet1").Select
    item = ActiveSheet.Range("Table1[1]")
    MsgBox (item)

End Sub

但我希望能够使用可调变量来引用表格列标题。为什么这不起作用:

Sub doesntwork()

    Dim item As String
    Dim i As String

    i = 1
    Sheets("Sheet1").Select
    item = ActiveSheet.Range("Table1[i]")
    MsgBox (item)

End Sub

这一定是语法问题,但我没有运气在过去 10 多年中对 VBA 语法的所有各种迭代进行排序......

请帮忙!谢谢。

4

3 回答 3

5

如果您想引用结构化表的标题,那么这将为您提供对包含标题的范围的引用:

Dim rng as Range    
Set rng = Activesheet.Range("Table1[#Headers]")

...如果您想按位置引用特定标题:

Dim rngHdr2    
Set rngHdr2 = rng.Cells(2) '2nd header cell
于 2012-07-19T21:26:05.983 回答
2

您需要使用连接将表名构建为字符串:

item = ActiveSheet.Range("Table1[" & i & "]") 
于 2012-07-19T21:06:59.643 回答
0

结合两个答案

子演示()

Dim rng As Range
Dim celda As Range
Dim nroTabla As Integer
Dim nroFila  As Integer
Dim nroCol   As Integer

nroTabla = 1
nroFila = 2
nroCol = 3

Set rng = ActiveSheet.Range("Tabla" & nroTabla & "[#Headers]")
Set celda = rng.Cells(nroFila, nroCol)

celda.Value = 700

结束子

于 2014-04-23T11:18:39.410 回答