vba - Excel 2013 工作簿在单独的 Excel 实例中通过链接进行通信

标签 vba excel

我有 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 实例中打开所有工作簿(即使您在打开下一个工作簿之前尝试像 2003 一样打开 Excel.exe)。我知道我可以强制 Excel 2013 通过 Ctrl + 右键单击​​菜单选项打开一个新的 Excel 实例,但是这些 Excel 实例现在无法像 2003 年那样相互通信。

在 excel 2013 中,当我在 A 和 B 之间创建相同的链接时,A 可以从 B 中提取的唯一数据是已保存到文件服务器的任何数据。 “A”没有“ Hook ”到“B”的“实时”实例中。

这是 Excel 2003 的一个变化。在 2003 中,如果先打开“B”,然后打开“A”,那么“A”会识别“B”已打开,并将 Hook 到“B”的实时运行实例(即使它们不在同一个实例中运行)。

excel 2013 工作簿有什么方法可以在单独的实例中运行(为了稳定性),但是让这些实例“ Hook ”实时进程......这是 Excel 2003 中的功能吗?

最佳答案

在其中一个工作簿(您选择拉出的第一个工作簿)中,您可以使用 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

关于vba - Excel 2013 工作簿在单独的 Excel 实例中通过链接进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32892065/

相关文章:

vba - 如何使用 For Each Loop with Formula 在 Excel 宏中填充多维数组?

excel - 为什么Excel在VBA代码的公式中添加@?

java - 如何在eclipse中导入src项目

python / Pandas : Looping through a list of numbers

excel - Excel中基于复杂团队规则的前十名排序

excel - VBA - 删除空行直到有数据

python - 将 python 列表导出到 Excel 列

vba - Excel VBA DIR 仅循环一次

python - 使用 Excel 工作表中的数据替换数据框中的值

Excel文本到时间