Access 2013 VBA 自动化 Excel 丢失 windows

Access 2013 VBA automating Excel losing windows

我支持一个已投入生产多年的 Access 应用程序,但它的 Excel 自动化部分已停止与我们的 Office 2013 升级和从 .mdb 到 .accdb 的转换一起工作。

Access 数据库包含对 Microsoft Excel 15.0 对象库的引用。

声明了Excel个对象:

Public objXLApp As Excel.Application       
Public objXLBook As Excel.Workbook    

并设置:

Set objXLBook = GetObject(strReportPath & strTitle & ".xls")
DoEvents
Set objXLApp = objXLBook.Parent

此时,objXLApp.visible = false。另外,objXLApp.Windows.Count = 1,这是正确的。 如果立即 window 我设置 objXLApp.visible = true,那么我将丢失我的 windows: objXLApp.Windows.Count = 0 和对预期 window [=57= 的引用] 一个 'Subscript out of range' 错误。

运行 它从 .mdb 文件生成相同的行为。

有什么想法吗?


Comintern,同样,代码是几年前别人写的,所以如果有更好的设置工作簿的方法,我愿意接受建议。

HansUp,我可以试试你的建议。你能post举个例子吗?如果有效,我会将您的答案标记为正确。

基因,是的,原始文件是.xls格式,他们没有升级到.xlsx。

Cointern,代码在最后一行代码停止执行,然后我使用立即数window检查值并更改可见的属性并再次检查值。


HansUp,修复了它。我将代码更改为:

Set objXLApp = New Excel.Application
DoEvents
Set objXLBook = objXLApp.Workbooks.Open(strReportPath & strTitle & ".xls")

如果您 post 回答,我会将您的答案标记为正确。

现在我只需要在代码中的其他地方更改它...

我的建议是先直接设置objXLApp变量,然后用它的WorkBooks.Open方法打开Excel 工作簿文件:

Set objXLApp = New Excel.Application
Set objXLBook = objXLApp.Workbooks.Open(strReportPath & strTitle & ".xls")

与此同时,您测试了该方法并发现它有效。但是,我不确定这是最终的解决方案,因为您的对象变量的范围在模块级别...

Public objXLApp As Excel.Application       
Public objXLBook As Excel.Workbook

如果您将重复调用代码,您可能会在其他地方可能仍需要它们时更改这些对象引用。另一方面,如果您永远不会重复 运行 代码,我认为没有理由关心 objXLApp.Windows.Count

我只是不知道这里会发生什么;我避免使用全局变量。