Access 2013 VBA自动使Excel丢失窗口

贝丝

我支持已经投入生产多年的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,这是正确的。如果在即时窗口中将我设置objXLApp.visible为true,那么我将丢失窗口:objXLApp.Windows.Count= 0,并且对预期窗口的引用将返回“下标超出范围”错误。

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

有任何想法吗?


同样,Commintern,该代码是几年前由其他人编写的,因此,如果有更好的方法来设置工作簿,则欢迎提出建议。

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

Gene,是的,原始文件为.xls格式,尚未升级为.xlsx。

Comintern,代码在代码的最后一行停止执行,然后使用即时窗口检查值并更改visible属性,然后再次检查值。


HansUp,已解决问题。我将代码更改为:

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

如果您发布答案,我会标记为正确答案。

现在,我只需要在代码中的其他任何地方进行更改...

汉素

我的建议是看是否可以通过首先直接设置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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章