在Excel工作簿激活事件中设置计算模式为自动将禁用工作簿间复制粘贴



我有一个带有以下VBA代码的工作簿,以确保公式计算模式设置为自动:

Private Sub Workbook_Activate()
    Application.Calculation = xlCalculationAutomatic
End Sub

如果我打开该工作簿(让我们称之为WB1),然后任何其他工作簿(WB2,在相同的EXCEL.EXE实例下打开),那么我不能从WB2复制单元格到WB1。"不能"是指当我按ctrl-v时,我听到Windows的"叮"声,但什么也没发生。

如果我使用下面的代码,一切正常。

' Now in Workbook_Open instead of Activate
Private Sub Workbook_Open()
    Application.Calculation = xlCalculationAutomatic
End Sub

这种行为是预期的吗?这在哪里有记录吗?还是这是个bug?不知怎么的,我觉得我不可能是第一个这样做的人。

我已经尝试使用c# Excel Add-In,并使用等效的Excel互操作代码产生相同的结果。

好的,我在输入问题的时候就明白了但是如果有人想知道,我还是要回答。


问题是调用Application.Calculation = xlCalculationAutomatic使原始工作簿失去焦点(要复制的单元格周围的移动线消失,好像我按下了escape)。

由于我把我的代码放在Workbook_Activate中,每次我去WB1复制时都被调用,导致了我的问题。

将代码移动到Workbook_Open对我来说是一个足够好的解决方案,但我喜欢认为使Excel非交互式,而我正在改变计算模式会起作用。我没有对这个解决方案进行严格的测试。

最新更新