繁体   English   中英

Excel VBA:粘贴到范围中时,ActiveCell无法正确解释

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM