访问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。