我有几个应用程序在传统的VB6中编写,内嵌了提取代码以创建EXCEL提取。我们正在从Excel 2007迁移到Excel 2013,并且遇到了一些问题。我运行Windows 10. 2007年,这是我的声明和Set
语句用来工作就好了... ...Excel 2013中的VB6提取
Option Explicit
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheetA As Excel.Worksheet
这些我都在模块的顶部。
在我的功能是将数据写入提取我做到这一点...
Set xlApp = New Excel.Application
Set xlBook = XlApp.Workbooks.Add
Set xlSheetA = xlBook.Worksheets.Add
当它到达XLBook - 它挂起来,一切都停止工作。我得到一个错误:
This action cannot be completed because the other program is busy. Choose "SwitchTo' to activate the busy program and correct the problem.
现在,在我跑我的提取物我要确保Excel未在后台运行,检查我去任务管理器 - >过程并删除它,如果它的存在。我究竟做错了什么?我应该如何更改我的代码?
编辑屏幕截图:屏幕显示不显示我在我的应用程序中的代码。这是一个新项目,只是为了展示我使用的所有代码。
有趣的是,访问没有给我任何问题。我打开了应用程序并在访问中运行了一些报告 - 2013年,一切都很顺利。 – BobSki
为了澄清,代码是VB6应用程序中的VB6代码,引用了Excel对象模型?如果是这样的话,我认为[vba]和[excel-vba]标签是令人困惑的事情。 –
另外,'xlApp','xlBook'和'xlSheetA'是模块范围的,并且在函数的作用域中被赋值并不正确。一个'Function'不应该有副作用,并且你正在改变全局状态(无论如何,模块状态)。在函数退出后留下带有悬挂对象引用的'xlSheetA','xlBook'和'xlApp'。此外 - 只是一个编码风格的小点,但使用'Private'而不是'Dim'来声明模块级别的变量将使您更清楚地指出私有字段。 –