我意识到这个话题已经以不同的变体被多次提出,但我仍然需要一些帮助才能相处。
我在 Excel 2016 中有一个启用宏的电子表格 (.xlsm)。
我有一个旧的 Sub,它使用调用
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)。 此外,这表明,由于 Cells(6, "B") 正在工作而 Cells(6, CollEmployeeEmail) 不起作用,因此当 Excel 在 Cells() 中遇到“B”作为索引时,它会将“B”解释为整数。 (使用 CollEmployeeEmail 作为索引会导致类型不匹配错误,因为这是一个字符串)
这让我很困惑,我想确认一下,这种行为实际上是由 Excel 的解释引起的,如果不是,则说明这种行为的原因。 也许也是对此最佳实践的建议。
感谢您的耐心和理解!
最佳答案
正如其他人指出的那样,只需使用CollEmployeeEmail =“B”
。原因是 B
周围的双引号创建了一个等于 B
的字符串变量。 CollEmployeeEmail = Chr(34) & "B"& Chr(34)
创建一个字符串变量,该变量等于 B
,并用双引号括起来 "B"
.
我建议始终在公共(public)模块中枚举工作表的列。这样,当您更改工作表列的结构时,您只需更新所有枚举即可。您还可以使用智能感知轻松地按名称引用列。
Public Enum OrdersColumns
ordCustomerName = 1
ordCount
ordAverage
ordSales
ordQuantity
ordDiscount
ordProfit
End Enum
您甚至可以设置枚举以允许您迭代。请参阅Chip Pearson - Enum Variable Type
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
关于vba - Excel VBA : Refering to column indexes in Worksheet. 单元格(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51108367/