Excel VBA:引用工作表中的列索引。单元格()
我意识到这个话题已经在不同的版本中被多次提到,但我仍然需要一些帮助来相处 我在Excel 2016中有一个启用宏的电子表格(.xlsm) 我有一个用电话的旧潜艇Excel VBA:引用工作表中的列索引。单元格(),vba,excel,Vba,Excel,我意识到这个话题已经在不同的版本中被多次提到,但我仍然需要一些帮助来相处 我在Excel 2016中有一个启用宏的电子表格(.xlsm) 我有一个用电话的旧潜艇 wsList.Cells(6, "B").Value 多次引用不同列中的数据。wsList是工作簿中的工作表对象 为了避免每次列顺序更改时都进行所有这些调用,我尝试在子类的顶部定义列字母索引 Dim CollEmployeeEmail As String ... CollEmployeeEmail = Chr(34) &
wsList.Cells(6, "B").Value
多次引用不同列中的数据。wsList是工作簿中的工作表对象
为了避免每次列顺序更改时都进行所有这些调用,我尝试在子类的顶部定义列字母索引
Dim CollEmployeeEmail As String
...
CollEmployeeEmail = Chr(34) & "B" & Chr(34)
...
wsList.Cells(6, CollEmployeeEmail).Value
但这给了我一个运行时错误“13”:类型不匹配错误
现在,我意识到Cells()-属性需要整数作为行和列索引,我可以将字母列索引转换为整数(例如,“B”=2)。
此外,这表明,由于单元格(6,“B”)正常工作,而单元格(6,CollEmployeeEmail)不正常,Excel在单元格()中遇到“B”作为索引时,会将其解释为整数。(使用CollEmployeeEmail作为索引会导致类型不匹配错误,因为这是一个字符串)
这让我感到困惑,我想确认一下,这种行为实际上是由于Excel的解释造成的,或者如果不是,是这种行为的原因。
也许这也是对这方面最佳实践的建议
谢谢你的耐心和理解 试试看
Dim CollEmployeeEmail As String
...
CollEmployeeEmail = "B"
...
wsList.Cells(6, CollEmployeeEmail).Value
用
CollEmployeeEmail=“B”
替换CollEmployeeEmail=Chr(34)和“B”&Chr(34)
,,正如其他人指出的那样,只需使用CollEmployeeEmail=“B”
。原因是B
周围的双引号创建了一个等于B
的字符串变量CollEmployeeEmail=Chr(34)&“B”&Chr(34)
创建一个字符串变量,该变量等于B
,并用双引号括起来“B”
我建议始终在公共模块中枚举工作表的列。这样,当您更改工作表列的结构时,您所要做的就是更新所有枚举。您还可以使用intellisense按名称轻松引用列
您甚至可以设置枚举,以允许您在整个过程中进行迭代。看
即时窗口
谢谢你的回答。当你写它的时候,它看起来很明显,但它肯定不是给我的 解决方案确实是用
CollEmployeeEmail=“B”
替换CollEmployeeEmail=Chr(34)和“B”&Chr(34)
,删除Chr(34)
引号
@TinMan:谢谢你详细的回答和关于枚举的提示。非常有用。您不需要
Chr(34)
,只需要CollEmployeeEmail=“B”
。然后您的单元格
引用应该可以工作。原因是CollEmployeeEmail
已声明为字符串
,因此单元格
以这种方式解释值。另一种使用双引号的方法是让单元格
知道它们之间有一个字符串值。非常感谢。回答准确,信息量大。
Public Enum OrdersColumns
ordCustomerName = 1
ordCount
ordAverage
ordSales
ordQuantity
ordDiscount
ordProfit
End Enum
Public Enum OrdersColumns
[_First] = 1
ordCustomerName = 1
ordCount
ordAverage
ordSales
ordQuantity
ordDiscount
ordProfit
[_Last] = 8
End Enum
For n = OrdersColumns.[_First] to OrdersColumns.[_Last] : _
Debug.Print Cells(1,n).Value : _
Next
Columns(OrdersColumns.ordCount ).Select