Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: как взять ссылку на запущенное приложение? Добавлено: 05.06.06 08:00  

Автор вопроса:  Serg_v
Добрый день!
Задача: получить ссылку на запущенное приложение (напр. Excel) в VB.

Часто сохраняем\загружаем данные путем

Dim ExcelApp As New Excel.Application
Dim ExcelWB As Excel.Workbook
Set ExcelWB = ExcelApp.Workbooks.Add
...


но сейчас необходимо в ExcelWB получить одну из уже открытых книг.

Спасибо.

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 Незнайка



Вопросов: 7
Ответов: 188
 Профиль | | #1 Добавлено: 05.06.06 09:26
1. Если известно имя книги
Set ExcelWB = ExcelApp.Workbooks("ИмяКниги.xls";)

2. Если не известно имя книги
Set ExcelWB = ExcelApp.Workbooks(1) - выберет первую в коллекции из открытых

3. Пробежим по всем открытым книгам
For Each ExcelWB In ExcelApp.Workbooks
    '... что-нибудь делаем
Next ExcelWB

 

Ответить

Номер ответа: 2
Автор ответа:
 Незнайка



Вопросов: 7
Ответов: 188
 Профиль | | #2 Добавлено: 05.06.06 09:31
Совсем забыл:
сначала получаем ссылку на уже запущеный Excel

Dim ExcelApp As Object
Set ExcelApp = Getobject(, "Excel.Application";)

Ответить

Номер ответа: 3
Автор ответа:
 Serg_v



Вопросов: 1
Ответов: 6
 Профиль | | #3 Добавлено: 05.06.06 09:36
Вооот...
А то я уже начал было писать, что это не тот экземпляр Excel-я...

А если их несколько? (excel-ей)

Ответить

Номер ответа: 4
Автор ответа:
 Serg_v



Вопросов: 1
Ответов: 6
 Профиль | | #4 Добавлено: 05.06.06 09:38
В любом случае спасибо!
посмотрю поподробней на Interaction...
Раньше не случалось.

Ответить

Номер ответа: 5
Автор ответа:
 Незнайка



Вопросов: 7
Ответов: 188
 Профиль | | #5 Добавлено: 05.06.06 14:15
А если их несколько? (excel-ей)

Чесно даже не встречался с таким раньше. А зачем несколько экземпляров запускать?

Ответить

Номер ответа: 6
Автор ответа:
 Serg_v



Вопросов: 1
Ответов: 6
 Профиль | | #6 Добавлено: 05.06.06 14:27
напр. если создать новый документ не нажатием "создать новый", а нажатием "запустить Excel" создается новый экземпляр App.

Еще если необходимо подбить "статистику" по нескольким файлам их, конечно же, необходимо открыть, прочитать и закрыть. Если их 1-2 то ладно. А если 30-40 то очень много времени тратится на Открыть - Закрыть. Я в этом случае предпочитаю создать новый App с visible=false. Тогда обработка пройдет незаметно для пользователя и данные можно будет отображать динамически. Ведь Экземпляр Excel, из которого запущен "макрос" остается видимым. К тому же при сбои в автоматически открываемых книгах не повлияет на основную программу - память разделена!

Ответить

Номер ответа: 7
Автор ответа:
 Незнайка



Вопросов: 7
Ответов: 188
 Профиль | | #7 Добавлено: 05.06.06 19:50
http://www.vbnet.ru/forum/show.aspx?id=109395

Вот посмотри, может пригодится. Для сбора данных не нужно выполнять операции "открытия - закрытия" рабочих книг. А уж тем более создавать экземпляры - посмотри в диспетчере задач, в процессах - сколько памяти занимает каждый экземпляр.

напр. если создать новый документ не нажатием "создать новый", а нажатием "запустить Excel" создается новый экземпляр App

Здесь я имел ввиду, что пока не встречал случаев, когда нужно использовать более 1 экземпляра.

Ответить

Номер ответа: 8
Автор ответа:
 Serg_v



Вопросов: 1
Ответов: 6
 Профиль | | #8 Добавлено: 06.06.06 12:58
действительно эффективней.
Спасибо!

Ответить

Номер ответа: 9
Автор ответа:
 Fever



Вопросов: 60
Ответов: 808
 Профиль | | #9 Добавлено: 07.06.06 12:27
Excel всегда один. (проверено: Office 2003)

Ответить

Номер ответа: 10
Автор ответа:
 Serg_v



Вопросов: 1
Ответов: 6
 Профиль | | #10 Добавлено: 08.06.06 07:39
Уважаемый Fever! Excel-ей можно наделать столько, на сколько у вас оперативки хватит. Есть доказательства и на 2000 и для 2003. Если будет интерес - вышлю по мылу скриншот.

Ответить

Номер ответа: 11
Автор ответа:
 Serg_v



Вопросов: 1
Ответов: 6
 Профиль | | #11 Добавлено: 08.06.06 07:49
Для Незнайки:
Если мне эти 50 файлов нужно не только проверить, но и исправить, тогда при использовании DAO я получу ощутимое приращение их массы (http://support.microsoft.com/kb/254634/en-us).
А если, как рекомендует support перед подключением DAO ипользовать
Set xlObj = GetObject(xlFileName)

получаем то же использование Automation, которого так хотелось избежать.

Еще вопрос: Если все эти рабочие книги используют Workbook_Open() для формирования данных, увижу ли я их используя DAO?

Ответить

Номер ответа: 12
Автор ответа:
 Незнайка



Вопросов: 7
Ответов: 188
 Профиль | | #12 Добавлено: 08.06.06 09:14
Если мне эти 50 файлов нужно не только проверить, но и исправить...
Это совсем другое дело! Причем дело плохо... изменять файлы Excelя используя DAO я бы лично НЕ СТАЛ - так как стремно - DAO с Excelем - совсем не тоже самое, что DAO с базами данных. 100% столкнешься даже с проблемой возвращения NULL в RecordSet - когда данные разнотипные - настройку драйвера также не удастся осуществить полностью...
Так что чтение - это эффективно - изменение ...тут мы ваще не знаем чем наше слово отзовется. Я бы редактировал только именно открывая - закрывая с
использование Automation.

Excelей же действительно можно наплодить тьму - ограничене правда только память. Кстати покопался и нашел примерчик обращения к различным процессам - то есть нескольким Excelям. Завтра выложу. Хотя убеждем - лучше всегда работать с одним экземпляром.

Если все эти рабочие книги используют Workbook_Open() для формирования данных, увижу ли я их используя DAO?
Конечно нет - ведь это событие вызывает приложение Excel, а ты его не трогаешь - ты получаешь данные используя DAO.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам