Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закрыть файл Excel из Access 
:(
    Опции темы
RockClimber
Дата 9.10.2006, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: 7
Всего: 15



Есть код (запускается макросом в Access, цель - импорт некоторых данных из книг Excel по изощренному алгоритму):
Код

Dim xlApp as Excel.Application
Dim xlR44 as Excel.Workbook
Dim xlR44Name as string

Set xlApp = CreateObject("Excel.Application")
Set xlR44 = Excel.Workbooks.Open(xlR44Name)

' Далее идет длинный кусок кода, где очень часто повторяется строчка
Set xlR44 = Excel.Workbooks.Open(xlR44Name)
' При этом значение переменной xlR44Name (имя открываемого файла) всегда разное

' Завершается все строчками:
Set xlR44=Nothing
Set xlApp=Nothing


В чем проблема: после инициализации переменной xlApp в списке процессов Windows появляется процесс Excel. После выполнения строчки Set xlApp=Nothing этот процесс остается висеть. Причем если перед этой строчкой написать
Код

xlApp.Quit
то эффект будет тот же, то есть никакой.
Вторая проблема - то, что все открытые файлы остаются висеть в памяти. Если выполнить строчку
Код

Set xlR44=Nothing
то не происходит ничего, а если попробовать написать
Код

xlR44.Close
 то выскакивает сообщение об ошибке - что-то типа того, что метод не поддерживается или поддерживается, но криво.
В итоге макрос порядком замусоривает память.
Вопрос: как позакрывать в макросе все ранее открытое?


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
Genyaa
Дата 10.10.2006, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Усердный
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 25.9.2006
Где: Москва

Репутация: 2
Всего: 11



Цитата

В чем проблема: после инициализации переменной xlApp в списке процессов Windows появляется процесс Excel. После выполнения строчки Set xlApp=Nothing этот процесс остается висеть. Причем если перед этой строчкой написать
Код

xlApp.Quit
то эффект будет тот же, то есть никакой.


Странно, но у меня тоже не получилось так закрыть Excel... Но получилось так:

Код

xlR44.Parent.Quit


если xlR44 - объект открытой книги в Excel.

Попробуйте, может поможет.
--------------------
Всякое решение плодит новые проблемы.
PM WWW   Вверх
Rodman
Дата 10.10.2006, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: нет
Всего: 122



А через макрос нельзя???

Через команды закрыть...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
RockClimber
Дата 10.10.2006, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: 7
Всего: 15



Rodman, а у меня что, не макрос, что ли?


Genyaa, сегодня пробовал, тоже ругается. Точную формулировку не помню, что-то типа "какой-то объект недоступен"...


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
Rodman
Дата 10.10.2006, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: нет
Всего: 122



Я в том смысле что не баиковский код, а из графического режима...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Aloha
Дата 10.10.2006, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
**


Профиль
Группа: Участник Клуба
Сообщений: 351
Регистрация: 14.5.2006

Репутация: 5
Всего: 165



RockClimber

В вашем коде объект xlApp оказался не связан с xlR44:
Код
Set xlApp = CreateObject("Excel.Application")
Set xlR44 = Excel.Workbooks.Open(xlR44Name)

Логичнее было бы инициализировать xlR44 так:
Код
Set xlR44 = xlApp.Workbooks.Open(xlR44Name)

В противном случае в xlApp не никакой необходимости.

Я опробовал такой вариант:
Код
Dim xlApp As Excel.Application
Dim xlR44 As Excel.Workbook
Dim xlR44Name As String

Set xlApp = New Excel.Application
Set xlR44 = xlApp.Workbooks.Open(xlR44Name)
'...
xlR44.Close

Set xlR44 = xlApp.Workbooks.Open(xlR44Name)
'...
xlR44.Close

Set xlR44 = Nothing

xlApp.Quit
Set xlApp = Nothing


И еще. Ваш код начинается со строки:
Код
Dim xlApp as Excel.Application

Отсюда можно сделать вывод, что Вы подключили к проекту объектную библиотеку Excel. Но потом Вы используете позднее связывание, вызывая функцию CreateObject:
Код
Set xlApp = CreateObject("Excel.Application")

Мне кажется, лучше в данном случае использовать раннее связывание:
Код
 Set xlApp = New Excel.Application



Это сообщение отредактировал(а) Aloha - 10.10.2006, 19:16
PM   Вверх
RockClimber
Дата 10.10.2006, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: 7
Всего: 15



О!
Теперь все понятно. Эти две строчки
Код

Set xlApp = CreateObject("Excel.Application")
Set xlR44 = Excel.Workbooks.Open(xlR44Name)
 я тупо списал из книжки по Access (кстати, книжка тоже туповатая). Меня немного смущало, что я открываю книгу Excel таким нелогичным способом, но почему я не стал разбираться - длинная история.
Кстати, а раннее связывание что дает?

Rodman, не очень понял как, если честно. Мне надо было чтобы полностью без моего участия. Оставил на ночь и пошел домой спать. К утру файлов 50 переработает, если все открыты будут - по-моему, тормозить сильно будет. Все-таки каждый файл по 8 мегов.


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.