[英]Excel VBA : ActiveCell not interpreted correctly when pasting into range
我已经编写了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
如果我在单元格A1中输入公式= CurrColumnName(),然后将A1复制到B1,C1,D1,则第二个函数也可以正常工作。 但是奇怪的是,如果我从A1复制公式并将其一次粘贴到一系列目标单元格中,则它为每个目标单元格返回相同的列字母。
例如,如果我在单元格A1中输入公式= CurrColumnName(),然后复制A1并将其粘贴到单元格B1到F1中,则会得到结果A,B,B,B,B,B。
似乎第一个示例中的COLUMN()参数是为每个降级单元解释的,但是第二个示例中的activeCell.Column方法仅对所有目标单元解释一次,而不对每个目标单元解释一次。
“活动单元”和“当前单元”之间有区别吗? 我使用了错误的方法吗?
谢谢...
将您的函数更改为如下所示:
Function CurrColumnName() As String
Dim colnum As Integer
colnum = Application.ThisCell.Column
CurrColumnName = Chr(colnum + 64)
End Function
Application.ThisCell
是此解决方案中的关键。 有关更多信息,您可以查看MSDN的Application.ThisCell property
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.