Страница: 1 |
Страница: 1 |
Вопрос: как взять ссылку на запущенное приложение?
Добавлено: 05.06.06 08:00
Автор вопроса: Serg_v
Добрый день!
Задача: получить ссылку на запущенное приложение (напр. Excel) в VB.
Часто сохраняем\загружаем данные путем
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
Чесно даже не встречался с таким раньше. А зачем несколько экземпляров запускать?
Номер ответа: 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
Вот посмотри, может пригодится. Для сбора данных не нужно выполнять операции "открытия - закрытия" рабочих книг. А уж тем более создавать экземпляры - посмотри в диспетчере задач, в процессах - сколько памяти занимает каждый экземпляр.
Здесь я имел ввиду, что пока не встречал случаев, когда нужно использовать более 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 ипользовать
получаем то же использование Automation, которого так хотелось избежать.
Еще вопрос: Если все эти рабочие книги используют Workbook_Open() для формирования данных, увижу ли я их используя DAO?
Номер ответа: 12
Автор ответа:
Незнайка
Вопросов: 7
Ответов: 188
Профиль | | #12
Добавлено: 08.06.06 09:14
Так что чтение - это эффективно - изменение ...тут мы ваще не знаем чем наше слово отзовется. Я бы редактировал только именно открывая - закрывая с
Excelей же действительно можно наплодить тьму - ограничене правда только память. Кстати покопался и нашел примерчик обращения к различным процессам - то есть нескольким Excelям. Завтра выложу. Хотя убеждем - лучше всегда работать с одним экземпляром.