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 - 范围变化时如何复制/粘贴

Excel VBA - 循环遍历多个文件夹中的文件,复制范围,粘贴到此工作簿中

从 Google 表格复制特定范围并将值粘贴到 excel

在 Excel 2016 中使用 VBA 将选定范围移动到一列上

Excel VBA:复制/粘贴范围

VBA 在 Outlook 中粘贴带有图表的特定 excel 范围