我在使用 VBA(来自 Access 2002)创建新的 excel 2007 实例时遇到问题。
起初我误解了这个问题,它比我想象的要复杂。
Set myXL = CreateObject("Excel.Application")
创建新进程(我以为没有),但仍然发生奇怪的事情。我使用 OLE 将 Excel 文件存储在 SQL Server 数据库中。
这是将 excel 文件绑定到表单的函数:
Public Function OpenExcelObjFrame() As BoundObjectFrame
Dim myXL As Object
Set myXL = CreateObject("Excel.Application") '#1
Set gTempWorkbook = myXL.Workbooks.Add
myXL.Visible = True '#2
DoCmd.OpenForm "Excel_OBJ"
Forms("Excel_OBJ").Visible = False
Forms("Excel_OBJ").RecordSource = "SELECT Excel_File FROM Excel_File_Obj;"
Set OpenExcelObjFrame = Forms("Excel_OBJ").Excel_File
End Function
上下文:
Dim tExcelObjFrame As BoundObjectFrame
Set tExcelObjFrame = OpenExcelObjFrame()
tExcelObjFrame.Verb = acOLEVerbOpen
tExcelObjFrame.Action = acOLEActivate '#3
ad 1第二个进程 excel.exe 启动
ad 2添加了这一行来检查第二个过程发生了什么
ad 3 OLE 将文件绑定到现有的 excel 实例,第二个进程在这里被杀死:/
所以问题是:
为什么 tExcelObjFrame.Action = acOLEActivate 会杀死第二个进程
如何在第二个过程中强制对象框架激活 excel 文件
编辑
我在这里找到了部分解释(没有明确的解决方案):
http://www.xtremevbtalk.com/showthread.php?t=292170
- 如果没有正在运行的 Excel 实例,OLE 会在您直接或通过编程访问该对象时创建一个 Excel 实例。
- 如果 Excel 的实例已在运行,则这是 OLE 对象使用的实例。
问题是 OLE 对象选择了错误的 excel 实例。问题是是否有办法将 OLE 指向特定实例。
此处描述的相同问题(未给出解决方案):