Excel VBA:ActiveCell在粘贴到范围时没有正确解释

我写了一个VBA函数来返回当前单元格的列字母。 下面的第一个例子接受一个列号作为参数,并返回相关的列字母。 (function分解到最低限度,重现问题)。

Function ColumnName(colnum As Integer) As String ColumnName = Chr(colnum + 64) End Function 

当以当前列号作为参数的公式(如下所示)中使用时,此函数始终返回正确的列字母; 是否将使用此函数的单元格值复制粘贴到单个其他目标单元格中​​,并粘贴到目标单元格区域时:

 =ColumnName(COLUMN()) 

例如,如果我input公式= 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 

如果我input公式= CurrColumnName()到单元格A1,然后将A1复制到B1,C1,D1这第二个function也正常工作。 但奇怪的是,如果我从A1复制公式并将其粘贴到一个目标单元格范围内,它将为每个目标单元格返回相同的列字母。

例如,如果我将公式= CurrColumnName()input到单元格A1中,然后复制A1并将其粘贴到单元格B1到F1中,则会得到结果A,B,B,B,B,B。

看起来好像第一个例子中的COLUMN()参数正在为每个目标单元解释,但是第二个例子的activeCell.Column方法对于所有目标单元只被解释一次,而不是每个目标单元一次。

“活动单元格”和“当前单元格”有区别吗? 我使用错误的方法吗?

谢谢…

改变你的function是这样的:

 Function CurrColumnName() As String Dim colnum As Integer colnum = Application.ThisCell.Column CurrColumnName = Chr(colnum + 64) End Function 

Application.ThisCell是这个解决scheme的关键。 有关更多信息,您可以通过MSDN查看此Application.ThisCell property