Excel VBA:粘贴到范围时未正确解释 ActiveCell
Posted
技术标签:
【中文标题】Excel VBA:粘贴到范围时未正确解释 ActiveCell【英文标题】:Excel VBA : ActiveCell not interpreted correctly when pasting into range 【发布时间】:2013-12-05 19:43:55 【问题描述】:我写了一个 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 方法只对所有目标单元格解释一次,而不是每个目标单元格一次.
“活动单元格”和“当前单元格”有区别吗?我是不是用错了方法?
谢谢...
【问题讨论】:
【参考方案1】:把你的函数改成这样:
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。
【讨论】:
以上是关于Excel VBA:粘贴到范围时未正确解释 ActiveCell的主要内容,如果未能解决你的问题,请参考以下文章
Excel VBA - 循环遍历多个文件夹中的文件,复制范围,粘贴到此工作簿中