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

Setting calculation mode to automatic in Excel workbook activate event disables inter-workbook copy-paste

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

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

如果我打开该工作簿(我们称之为 WB1),然后打开任何其他工作簿(WB2,在同一 EXCEL.EXE 实例下打开),那么我无法将单元格从 WB2 复制到 WB1。 "can't" 我的意思是当我按下 ctrl-v 我听到 Windows' "ding" 声音和没有任何反应。

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

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

这种行为是预期的吗?这在任何地方都有记录吗?或者这是一个错误?不知何故我觉得我不能成为第一个这样做的人。

我已经尝试使用 C# Excel 加载项并使用等效的 Excel Interop 代码产生相同的结果。

好的,所以我在输入问题时想出了这个问题,但如果有人想知道我无论如何都会回答...


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

因为我把我的代码放在 Workbook_Activate 中,所以每次我去 WB1 复制时都会调用它并导致我的问题。

将代码移动到 Workbook_Open 对我来说是一个足够好的解决方案,但我认为在我更改计算模式时使 Excel 成为非交互式会奏效。我没有严格测试这个解决方案。