Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VBA命令打开工作簿(自动模式),无需重新计算_Vba_Excel - Fatal编程技术网

使用VBA命令打开工作簿(自动模式),无需重新计算

使用VBA命令打开工作簿(自动模式),无需重新计算,vba,excel,Vba,Excel,在我的VBAaddin.xlam中,我使用工作簿.Open(“C:\f.xlsm”)打开工作簿f.xlsm。f.xlsm的工作簿计算模式是Automatic,因此我意识到在调用工作簿后,f.xlsm中的所有内容都会自动重新计算。打开(“C:\f.xlsm”)。但这不是我想要的 即使工作簿的模式是“自动”,也可以通过VBA命令打开工作簿而不刷新它吗 编辑1: 我尝试了@Ripster建议的想法: 1) 我在addin.xlam中创建了一个类模型CExcelEvents: Private WithE

在我的VBA
addin.xlam
中,我使用
工作簿.Open(“C:\f.xlsm”)
打开工作簿
f.xlsm
f.xlsm
的工作簿计算模式是
Automatic
,因此我意识到在调用
工作簿后,
f.xlsm
中的所有内容都会自动重新计算。打开(“C:\f.xlsm”)
。但这不是我想要的

即使工作簿的模式是“自动”,也可以通过VBA命令打开工作簿而不刷新它吗

编辑1:

我尝试了@Ripster建议的想法:

1) 我在
addin.xlam
中创建了一个类模型
CExcelEvents

Private WithEvents App As Application
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
    Application.Calculation = xlCalculationManual
End Sub
Private Sub Class_Initialize()
    Set App = Application
End Sub
2) 我将
CExcelEvents
链接到
addin.xlam
中打开的
f.xlsm
中的代码:

Private XLApp As CExcelEvents
Sub try()
    Set XLApp = New CExcelEvents
    workbooks.Open ("C:\f.xlsm")
End Sub

然后,
try()
首先打开
f.xlsm
(触发自动重新计算),然后将其计算模式更改为手动。在更改模式之前已重新计算工作簿-太晚了!有人知道吗

打开工作簿之前,请尝试将XLCalculation设置为手动:

Sub try()
    Application.Calculation = xlCalculationManual
    workbooks.Open ("C:\f.xlsm")
End Sub

我不确定这是否有效,但您可以订阅工作簿事件并取消计算。描述如何订阅事件。嗯,我无法将VBA宏更改/添加到
f.xlsm
,因此我认为它不起作用…仅在打开之前设置
Application.Calculation=xlCalculationManual
,是行不通的。我在
addin.xlam
中尝试了该命令,但它返回了一个错误,我认为与打开的工作簿不同,
addin.xlam
不知道该命令与哪个工作簿有关……我使用了在外接程序中链接的方法订阅打开事件,以便每次打开工作簿时都可以运行一些代码。我不明白为什么这对你目前的情况不起作用。该方法不需要添加到f.xlsm,而是添加到xlam加载项文件中。它将为您提供一个对象,可以订阅您打开的每个工作簿的事件。