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

时间:2015-07-10 19:56:10

标签: excel vba excel-vba excel-interop

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

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

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

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

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

预计会出现这种情况吗?这记录在哪里?或者这是一个错误?不知怎的,我觉得我不能成为第一个这样做的人。

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

1 个答案:

答案 0 :(得分:0)

好的,所以当我输入问题时我想出了这个问题,但如果其他人想知道我还是会回答...

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

由于我将代码放在Workbook_Activate中,每次我在WB1中复制时都会调用它,导致我的问题。

将代码移动到Workbook_Open对我来说是一个很好的解决方案,但我喜欢认为在我改变计算模式的同时使Excel非交互式会有效。我没有测试这个解决方案很难。