【发布时间】:2020-03-04 12:19:33
【问题描述】:
如何从 Access VBA 更新 Excel 工作簿中的 .Application 属性?
我正在使用 Access VBA 将数据导出到 Excel、打开文件并格式化文件(添加公式等)。
代码很慢。我想禁用屏幕更新并将 Excel 计算更改为手动。
.ScreenUpdating = false 不会产生运行时错误,但屏幕会更新,就像忽略代码一样。
.Application.Calculation 产生运行时错误 1004。
Dim Xl As Excel.Application
Dim XlBook As Excel.Workbook
Set Xl = CreateObject("Excel.Application")
Set XlBook = GetObject(Forms!Main!Final_filepath)
XlBook.Activate
XlBook.Windows(1).Visible = True
'Hide alerts to prevent interruptions when running code
Xl.Application.DisplayAlerts = False '<---- No errors
Xl.Application.ScreenUpdating = False '<---- No errors, but screen updating isn't disabled.
Xl.Application.Calculation = xlCalculationManual '<---- Run-Time Error 1004
【问题讨论】:
-
如果
Xl是Excel.Application(并且代码可以编译),那么Xl.Application是多余的。Xl.ScreenUpdating = False工作得更好吗? (没想到会这样,因为Xl.Application应该正好指向Xl对象) -
FWIW
Set Xl = CreateObject("Excel.Application")是一种相当迂回的方式来做Set Xl = New Excel.Application(同样,不是问题,只是指出来) -
缺少一些代码,对吧?我无法理解在创建的
Excel.Application实例中没有打开任何工作簿的事实,但是XlBook被分配得很好......GetObject似乎是一种奇怪的方式来做到这一点。Set XlBook = Xl.Workbooks.Open(Forms!Main!Final_filepath)似乎更简单。 -
我怀疑丢失的代码是答案 - 很可能,有一个隐含的
Excel.Application实例在某处意外创建,不知何故(这很容易做到!只需忘记 @987654338 @qualifier 某处和繁荣,隐式应用程序引用,以及宏完成后在任务管理器中挥之不去的幽灵 EXCEL.EXE 进程)。 -
嗨,Mathieu,感谢您提出的所有精彩建议。我同意我使用的代码有点笨拙,感谢您提供更简洁语法的建议。我不是一个受过正规训练的宏观作家;这些年来,我从零碎中学到了所有东西,并通过了很多很多谷歌搜索。我使用的代码被无耻地复制和科学怪人一起完成最终目标。