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
。
我只是不知道这里会发生什么;我避免使用全局变量。
我支持一个已投入生产多年的 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
。
我只是不知道这里会发生什么;我避免使用全局变量。