我编写了一个VBA函数来返回当前单元格的列字母。 下面的第一个示例接受列号作为参数,并返回关联的列字母。 (功能被剥离到最低限度,可以再现问题)。
Function ColumnName(colnum As Integer) As String
ColumnName = Chr(colnum + 64)
End Function
在公式中使用当前列号作为参数(如下所示)时,此函数始终返回正确的列字母;是否将使用此函数的单元格值复制并粘贴到单个其他目标单元格中,以及粘贴到一系列目标单元格中时:
=ColumnName(COLUMN())
例如,如果我将公式= ColumnName(COLUMN())输入到单元格A1中,然后将A1复制并粘贴到单元格B1到F1中,则得到结果A,B,C,D,E,F(如所示)
然后我将函数更改为在程序中确定函数内的当前单元格而不是接受参数。
Function CurrColumnName() As String
Dim colnum As Integer
colnum = ActiveCell.Column
CurrColumnName = Chr(colnum + 64)
End Function
如果我将公式= CurrColumnName()输入到单元格A1,然后将A1复制到B1,C1,D1,则第二个函数也可以正常工作。但奇怪的是,如果我从A1复制公式并将其同时粘贴到一系列目标单元格中,它会为每个目标单元格返回相同的列字母。
例如,如果我将公式= CurrColumnName()输入单元格A1,然后复制A1并将其粘贴到单元格B1到F1中,我得到结果A,B,B,B,B,B。
似乎第一个示例中的COLUMN()参数正在为每个目标单元格进行解释,但第二个示例的activeCell.Column方法仅针对所有目标单元格解释一次,而不是针对每个目标单元格解释一次
“活动细胞”和“当前细胞”之间有区别吗?我使用了错误的方法吗?
...谢谢
答案 0 :(得分:2)
将您的功能更改为以下内容:
Function CurrColumnName() As String
Dim colnum As Integer
colnum = Application.ThisCell.Column
CurrColumnName = Chr(colnum + 64)
End Function
Application.ThisCell
是此解决方案的关键。有关详细信息,请参阅此Application.ThisCell property
by MSDN。