我正在使用 Datanitro 构建一个程序,该程序从许多工作簿中收集数据并将其转储到主工作簿中。
该程序运行良好,尽管它的运行速度比我希望的要慢,而且每次我运行 close_wkbk() 时,excel 都会询问我是否要保存工作簿(我不想)。
为了使用 VBA 解决这个问题,我将使用以下代码片段将程序括起来:
With Application
.DisplayAlerts = False
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
With Application
.DisplayAlerts = True
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
Datanitro 似乎不支持此功能,因此我在运行脚本的工作簿中的一个模块中创建了以下两个 VBA 子例程:
Sub RemoveAlerts()
With Application
.DisplayAlerts = False
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
End Sub
Sub DisplayAlerts()
With Application
.DisplayAlerts = True
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
End Sub
然后,我用以下代码将我的 python 脚本括起来:
VBA("RemoveAlerts")
VBA("DisplayAlerts")
RemoveAlerts 似乎可以正确执行,但 DisplayAlerts 抛出以下错误消息
, line 48, in grab_all_intrinsic_values
VBA("DisplayAlerts")
File "27/basic_io.py", line 1850, in VBA
File "27/iron.py", line 305, in runExcelMacro
File "27/dnparser.py", line 95, in checkForErrors
dntypes.NitroException: The object invoked has disconnected from its clients.
(Exception from HRESULT: 0x80010108 (RPC_E_DISCONNECTED))
知道是什么导致了这个错误吗?
找到答案时包括以下编辑:
原来问题是我的 active_workbook 已更改为不包含 DisplayAlerts 子例程的工作簿。我确保将我的 active_workbook 设置回包含子例程的那个并且它工作正常。