我有2个Excel工作簿,其中包含大量基于事件的VBA代码。如果它们最终在相同的Excel(2003或2013)实例下运行,则事件会同时触发并导致崩溃。
因此,在Excel 2003中,我在excel的单独实例中打开工作簿(A和B),而工作簿A有一个指向"拉入"使用格式
从工作簿B实时更新日期{=Excel.Sheet.8|'\\server\B.xls'!'!Sheet1!R1C1:R300C8'}
我先打开" B"在它自己的实例中,然后我打开" A"也在它自己的实例中。 " A"询问我是否要从外部工作簿更新链接,并选择"更新"
在Excel 2003中,这非常有效。工作簿在不同的Excel实例下运行,因此不占用内存,一切都安全稳定,但A从B获取实时流更新(不是来自已保存的文件,而是来自实时运行的实例)。因此,即使它们在内存中的Excel 2003的不同实例中运行,它们也能够通过链接进行通信。
在excel 2013中,默认行为是在同一个excel实例中打开所有工作簿(即使您在打开下一个工作簿之前尝试打开Excel.exe,如2003年)。我知道我可以通过Ctrl +右键单击菜单选项强制Excel 2013打开一个新的Excel实例,但是这些Excel实例现在无法像2003年那样相互通信。
在excel 2013中,当我在A和B之间创建相同的链接时,A可以从B中提取的唯一数据是保存到文件服务器的任何数据。 " A"没有"钩子"进入"直播" " B"。
的实例这是对Excel 2003的更改。2003年,如果" B"首先打开,然后" A"打开,然后" A"认识到" B"是开放的,将挂钩" B"的实时运行实例(即使它们不在同一个实例中运行)。
excel 2013工作簿是否有任何方法可以在不同的实例中运行(为了稳定性),但是有这些实例" hook"实时进程......这是Excel 2003中的功能吗?
答案 0 :(得分:0)
在其中一个工作簿(您选择的第一个工作簿)中,您可以使用VBA定义2个Excel实例。然后,您可以引用每个实例并使用Application.Run在每个Excel程序中执行子例程。
作为一个例子......
Sub FromBook1()
Dim EApp1 as Excel.Application
Dim EApp2 as Excel.Application
Dim Bk1 as Excel.Workbook
Dim Bk2 as Excel.Workbook
'Set the first object to this instance of Excel (the first book you opened)
Set EApp1 = GetObject(,"Excel.Application")
Set EApp2 = CreateObject("Excel.Application")
Set Bk1 = EApp1.Workbooks("[name of workbook #1]")
Set Bk2 = EApp2.Workbooks.Open("[path for workbook #2]")
'Put your condition/event in here (e.g., an if/then)
'If the condition is triggered
With EApp2
.Run("[Name of subroutine in book 2 to call]")
End With
End Sub