vba - Excel VBA : Refering to column indexes in Worksheet. 单元格()

标签 vba excel

我意识到这个话题已经以不同的变体被多次提出,但我仍然需要一些帮助才能相处。

我在 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" .

enter image description here

我建议始终在公共(public)模块中枚举工作表的列。这样,当您更改工作表列的结构时,您只需更新所有枚举即可。您还可以使用智能感知轻松地按名称引用列。

enter image description here

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

enter image description here

立即窗口

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/

相关文章:

vba - 为什么 Excel VBA 中的其他模块无法识别我的全局变量?

ms-access - VBA如何在出错时退出功能?不工作Access 2007

vba - 使用 Excel 宏 VBA 在 excel 范围内查找行的最快方法

java - 如何使用 POI SS 打开 .xlsx 文件?

vba - Excel 函数(或 VBA)检查单元格中的相同值

vba - 隐藏宏中的字符以进行密码控制

vba - 我的代码有效,但 Excel 停止响应。代码中没有错误消息

mysql - VBA删除表后的行

python - 使用 NumPy 重现 Excel 的 LINEST 函数

excel - HLOOKUP 后获取最小值