Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:引用工作表中的列索引。单元格()_Vba_Excel - Fatal编程技术网

Excel VBA:引用工作表中的列索引。单元格()

Excel VBA:引用工作表中的列索引。单元格(),vba,excel,Vba,Excel,我意识到这个话题已经在不同的版本中被多次提到,但我仍然需要一些帮助来相处 我在Excel 2016中有一个启用宏的电子表格(.xlsm) 我有一个用电话的旧潜艇 wsList.Cells(6, "B").Value 多次引用不同列中的数据。wsList是工作簿中的工作表对象 为了避免每次列顺序更改时都进行所有这些调用,我尝试在子类的顶部定义列字母索引 Dim CollEmployeeEmail As String ... CollEmployeeEmail = Chr(34) &

我意识到这个话题已经在不同的版本中被多次提到,但我仍然需要一些帮助来相处

我在Excel 2016中有一个启用宏的电子表格(.xlsm)

我有一个用电话的旧潜艇

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