получить excel, в котором произошло

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

получить excel, в котором произошло

Сообщение Avtopic » 21.11.2007 (Ср) 23:15

Здравствуйте!

В VB имею класс cLExApp.
внутри Public WithEvents cLExApp As excel.Application
...

Открываю ексел. Параллельно существуют (появляются) другие экземпляры excel.Application. Их открываю не я.

в событии Private Sub cLExApp_WorkbookOpen обрабатываю открытие книг.

к сожалению, если мой ексел “сами первый” в cLExApp_WorkbookOpen отлавливаются все книги, открытие которых происходит в любом из экземпляров excel Application даже в “чужом. И, редко, но некоторые “чужие” книги пропускаются.

Мне нужно понимать только открытие книг открытых моим экземпляром.

И как раз в этом плане, никак не могу определить экземпляр excel, который открыл книгу и спрвоцировал собитие cLExApp_WorkbookOpen. Т.е. получить объект excel, в котором произошло открытие книги.
Как можно найти?

...уже поздно, и наверно не совсем понятно объяснил.

Спасибо!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.11.2007 (Чт) 8:53

If sh.Application Is cLExApp Then ...
Lasciate ogni speranza, voi ch'entrate.

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 23.11.2007 (Пт) 15:23

Извиняюсь, за поздний ответ.

проблема как раз в том что

sh.Application Is cLExApp всегда True

как я писал, если “мой” Excel открыт первым, и если после него ярлыком на десктопе открыть второй экземпляр Excel, и из второго File->Open открыть несколько следующих файлов, мой перехватывает их открытие,
а раз перехватывает, sh.Application Is cLExApp всегда True

Excel 2000.

В итоге мне нужно запретить открытие через мой экземпляр,
Т.е. открывать их в новом экземпляре, если запущены в моем,
или пропускать, если запущены в чужом.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 23.11.2007 (Пт) 17:27

Твой экземпляр ничего не перехватывает, второй экземпляр не создается. При открытии файла через ShellExecute (в проводнике), объектная модель экселя считает правильным не городить новые экземпляры приложения, а открывать книгу в первом попавшемся из уже сущестующих.

Можно запоминать пути "своих" книг, а в WorkbookOpen проверять путь WB.Path и ничего с книгой не делать, если ее путь неправильный. А может быть тебе подойдет свойство IgnoreRemoteRequests или Interactive. Не уверен точно за что они отвечает, но названия многообещающие.
Лучший способ понять что-то самому — объяснить это другому.

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 23.11.2007 (Пт) 18:48

Первый абзац абсолютно точен, все они открываются в моем экземпляре. В этом убедился при закрытии моего экземпляра, закрывает все те которые спровоцировали в свое время событие Open в маем.
Что касается второго абзаца, насчет пути не понял, как его использовать, а свойства проверю.
Спасибо!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 70

    TopList  
cron