通过链接进行Excel通讯的单独实例中的Excel 2013工作簿

我有很多基于事件的VBA代码的2 Excel工作簿。 如果它们最终在Excel(2003或2013)的同一个实例下运行,则这些事件同时触发并导致崩溃。

因此,在Excel 2003中,我在Excel的单独实例中打开了工作簿(A和B),工作簿A有一个链接,用于从工作簿B中“拉入”实时更新date,使用格式

{=Excel.Sheet.8|'\\server\B.xls'!'!Sheet1!R1C1:R300C8'} 

我首先在自己的例子中打开“B”,然后在它自己的实例中打开“A”。 “A”询问我是否想从外部工作簿更新链接,然后select“更新”

在Excel 2003中,这是完美的。 工作簿在不同的Excel实例下运行,因此没有内存占用,一切都是安全稳定的,但A从B(不是保存的文件,而是来自实时运行的实例)获取实时stream更新。 因此,即使他们在内存中运行Excel 2003的单独实例,他们也能够通过链接进行通信。

在Excel 2013中,默认行为是打开Excel中相同实例的所有工作簿(即使在打开下一个工作簿之前,如果您尝试在2003年打开Excel.exe)。 我知道我可以强制Excel 2013通过Ctrl +右键单击菜单选项打开一个新的Excel实例,但是现在Excel的这些实例无法像在2003年那样与对方进行通信。

在Excel 2013中,当我在A和B之间创build相同的链接时,A可以从B中获取的唯一数据是保存到文件服务器的数据。 “A”对“B”的“实况”实例没有“挂钩”。

这是从Excel 2003的一个变化。在2003年,如果“B”首先打开,然后“A”打开,然后“A”认识到“B”是开放的,将挂钩到“B” (即使它们不在同一个实例中运行)。

有没有什么办法让excel 2013工作簿在单独的实例中运行(为了稳定性),但是让这些实例“钩住”活动进程……这是Excel 2003中的能力?

在其中一个工作簿(您select第一个工作簿)中,您可以使用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 (eg, an if/then) 'If the condition is triggered With EApp2 .Run("[Name of subroutine in book 2 to call]") End With End Sub