2015-10-01 5 views
2

У меня есть две книги Excel с большим количеством кода VBA на основе событий. В конце концов, они запускаются под одним и тем же экземпляром Excel (2003 или 2013), события запускаются одновременно и приводят к сбою.Книги Excel 2013 в отдельных экземплярах Excel, общающихся через связь

Так, в Excel 2003, я открываю книги (А и В) в отдельном экземпляре Excel, и учебное пособие А имеет связь с «тянуть в» живой дате обновления с рабочей книги 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 году, перед тем как открыть следующую книгу). Я знаю, что я могу заставить Excel 2013 открыть новый экземпляр Excel с помощью контекстного меню Ctrl +, но эти экземпляры Excel теперь НЕОБХОДИМО связываться друг с другом, как в 2003 году.

В excel 2013, когда я создаю ту же связь между A и B, единственными данными, которые A может вытащить из B, является то, что было сохранено до файлового сервера. «A» не имеет «крючков» в «живой» экземпляр «B».

Это изменение из Excel 2003. В 2003 году, если сначала открывается «B», а затем «A» открывается, то «A» распознает, что «B» открыт и будет подключен к текущему экземпляру «B» (хотя они не работают в одном экземпляре).

Есть ли какой-либо способ для книг Excel Excel для запуска в отдельных экземплярах (для обеспечения стабильности), но есть ли у этих экземпляров «перехватывание» живых процессов ... что это было в Excel 2003?

+0

У меня есть только одно событие, приводимый рутина так первенствует никогда не разбился для меня, используя тот же экземпляр. Пробовали ли вы настройку enableevents = false непосредственно перед событием? – findwindow

+0

не решает мою проблему ... и по разным причинам, я ищу, чтобы вернуть функциональность, которую я ранее имел с Excel 2003 ... но теперь больше не доступен. wtf microsoft ... – iron

+2

Очевидно, что msft хочет, чтобы вы понизили рейтинг. – findwindow

ответ

0

В одной из книг (первая из которых вы выберете) вы можете определить 2 экземпляра Excel с помощью VBA. Затем вы можете обратиться к каждому экземпляру и использовать 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 
+0

Мне нравится эта идея ... спасибо – iron

Смежные вопросы