excel vba中的结构化引用:在Range中使用'#Headers '

人们,不太确定如何正确呈现。 所以忍耐着我:

  1. 我有一个Excel VBA用户表单,并想在用户窗体内执行一个calc,从一个单元格检索xls工作表中的数据

  2. 我可以select的单元格是'A'(GrossSales)和Revenue表中的任何一行; 然后选定的单元格标识“active cell.row”。 现在,我想要的特定数据列在其他列中定义 – 该列可以通过#Headers [销售]

  3. 由于工作表正在开发中,我不断移动列; 所以我想使用一个'dynamic'参考列的名称,而不是一个'静态'名称使用列字母[像col'H']

所以,它是如何工作的,我点击工作表中的'A'中的一个单元格,并且用户表单得到我的活动行:ActiveCell.Row; 而且现在xls已经是“静态”了,所以这个列简直就是“H”。 在用户表单然后,我得到我的具体价值来计算使用Me.Sales.Value =范围(“H”&ActiveCell.Row).Value

我需要的是用标题行“名称”replace“H”,所以如果我移动列这个链接仍然有效。 我试过这个:Me.txtSales.Value = Range(“Table_Revenue [[#Headers],[Sales]]”&ActiveCell.Row).Value,我得到这个错误:..运行时错误1004 .. ..方法'对象'_Global'的范围失败

因此对[#Headers],[Sales]的引用不会返回旧的“H”

谁能告诉我我在这里失踪? 可能是我对参考文献Table_Revenue [[#Headers],[Sales]]内部的内容缺乏了解。 这显然是不等于H.我试图把参考到一个MsgBox来显示,但也失败了。

谢谢,恩

我build议你使用ListObject来代替:

 Me.txtSales.Value = Intersect(Activecell.Entirerow, Activesheet.Listobjects("Table_Revenue").Listcolumns("Sales").Range).Value 

罗瑞,你是对的。 我正在试验,以了解范围和价值[我仍然非常潮湿的耳朵之后w / excel&vba]。 我试过这些东西:

  1. Me.txtSales.Value =相交(Activecell.Entirerow,Activesheet.Listobjects(“Table_Revenue”)。Listcolumns(“Sales”)。范围)与dim txtSales Variant,然后与昏暗的txtSales范围
  2. Me.txtSales =相交(Activecell.Entirerow,Activesheet.Listobjects(“Table_Revenue”)。Listcolumns(“Sales”)。范围).Value with dim txtSales Variant

和#2工作正确,与“净销售”之间的空间。 所以,正如你所说 – 它应该工作,它确实。 我觉得我发现以及这个版本:Range(“Table_Revenue [[#Headers],[Sales]]”&ActiveCell.Row).Value被评论为只能在Excel中工作,而不是在VBA中。

最后一件事:ListObjects的工作,因为它是一个“表”? 如果它不是一张桌子,而是定义为一个“范围”,它会起作用吗?

无论如何,我学到了很多 – 非常感谢你的解决scheme,但更要感谢学习的经验。

罗恩