访问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文件生成相同的行为。

有任何想法吗?


共产国际再次,代码是由几年前由其他人写的,所以如果有更好的方法来设置工作簿,我愿意提出build议。

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

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

共同制,代码停止在最后一行代码执行,然后我使用立即窗口检查值,并更改可见属性,并再次检查值。


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

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

如果你发表一个答案,我会标记你的正确。

现在我只需在代码中的其他地方改变它…

我的build议是通过首先直接设置objXLAppvariables,然后使用其WorkBooks.Open方法打开Excel工作簿文件来查看是否可以消除此问题:

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

同时,你testing了这个方法,发现它的工作。 但是,我不能确定这是最终的解决scheme,因为你的对象variables是在模块级别作用域…

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

如果您要重复地调用代码,那么在其他地方可能仍然需要时可以修改这些对象引用。 另一方面,如果你不会反复运行代码,我没有看到理由关心objXLApp.Windows.Count

我只是不知道这里会发生什么, 我避免了全局variables。