0 / 0 / 0
Регистрация: 10.05.2010
Сообщений: 67
|
||||||
1 | ||||||
После закрытия Excel процесс остается10.05.2010, 01:41. Показов 9056. Ответов 9
Метки нет (Все метки)
Я сразу извеняюсь перед теми, кому покажется этот вопрос ламерским.
Формирую в одной процедуре(клик на кнопку)отчёт в Excel. В этой же процедуре пишу такие строки Dim oExcel As Excel.Application Set oExcel = CreateObject('Excel.Application') ... тут идёт заполнение ячеек цифрами и словами и рисование рамок Set oExcel = Nothing ' последняя строчка Данные, которые заношу в таблицу Excel забираю из базы Access. НО!!! При первой оброботке этого события (нажатия на кнопку и формирования отчёта) всё формируется так как надо: и данные где надо центрируються, и у ячеек рамочки рисуются. А когда нажимаешь на кнопку следуюший раз, то получаеться такая фигня: 1. Если я не закрываю окно с Excel от предыдущего отчёта, то отчет формтруеться, но ничего где надо не центрируется и рамки ячеек не рисуються. 2. Если я закрываю окно с Excel то VB пишет ошибку на таком месте
И ещё непонятно почему после закрытия Excel с отчётом в памяти висит oExcel(по Ctrl+Alt+Del, на панеле задач его нет). Я ж явно обнуляю объект oExcel в конце процедуры???????? Заранее благодарен кто откликнется на мой вопрос!!! :-)))
0
|
10.05.2010, 01:41 | |
Ответы с готовыми решениями:
9
Не завершается процесс Excel после закрытия приложения Работа с Excel: его процесс висит даже после закрытия программы Окно остается в памяти после закрытия После закрытия форма остается висеть в памяти |
1 / 1 / 0
Регистрация: 25.05.2008
Сообщений: 232
|
||||||
10.05.2010, 09:52 | 2 | |||||
Чтобы объект экселя не висел в памяти необходимо выполнить такой код:
oExcel.Quit Set oExcel=Nothing Но т.к. Вы определяете эксель в процедуре нажатия на кнопку и уничтожаете там же, то объект экселя будет жить пока выполняется процедура. Надо, наверное, определить эксель как глобальную переменную в модуле. Я делаю так: В модуле -
Эта методика работает и я юзаю только свой эксель, не зависимо от того запущены ли еще эксели пользователя. Может что то не так, тогда пусть народ поправит. Буду признателен.
0
|
0 / 0 / 0
Регистрация: 10.05.2010
Сообщений: 67
|
||||||
12.05.2010, 21:56 [ТС] | 3 | |||||
Огромное спасибо за помощь, только у меня ещё один вопросик:
Вот я написал так, как Вы посоветывали, только у меня выдаётся ошибка на строке:
'Compiler error Constants,fixed-length string, arrays, user-defined types and Declare statements not allowed as Public members of object moduls'. Может нужно подключить ещё каку-то библиотеку?? Я к сожаленью не работал ещё с Api функциями, :-((( Забанее благодарю за помощь...
0
|
1 / 1 / 0
Регистрация: 03.02.2010
Сообщений: 43
|
|
13.05.2010, 12:04 | 4 |
если объявление функции написано в форме, то надо объявить с Private:
Private Declare Function FindWindowByClass Lib 'user32' _ Alias 'FindWindowA' (ByVal lpClassName As String, _ ByVal lpWindowName As Long) As Long в данный момент по умолчанию у тебя стоит Public если хочешь, чтобы ф-ция была Public, то помести объявление в модуль
0
|
0 / 0 / 0
Регистрация: 10.05.2010
Сообщений: 67
|
|
13.05.2010, 23:36 [ТС] | 5 |
Спасибо, API функцию получилось подключить, только первоначальная проблема осталась. Когда заканчиваю работать с Excel пишу Set oExcel = Nothing. Но после этого в памяти висит Excel до тех пор пока не закрою прогу. Я думал что проблема в этом, т.к. при первой обработке (открывания и записи в Excel) всё получается, но если, не выходя из проги, повторить процедуру, появляються ошибки(открытие Excel проходит нормально, запис в ячейки тоже, а когда начинаю работать с Selection выскакивает ошибка, что ничего не выбрано, но я перед строкой Selection пишу .Range('A7:H8').Select и в Excel я вижу что эти ячейки выбрались). НО даже выгрузка Excelя ручками из памяти перед выполнения повторной процедуры не дало никаких результатов. Взял работающую прогу (другую) в которой тоже исспользуется работа с Excel, там такой код:
Set oExcel = CreateObject('Excel.Application') oExcel.Workbooks.Open (App.Path & 'Report ' & cRep1) ... запись в Excel и расование рамок oExcel.Visible = True Set oExcel = Nothing End Sub Так здесь после выполнения предпоследней строки, Excel выгружаеться из памяти . А у меня нет... Правда отличие в том, что тут открываеться файл, а я создаю новый: oExcel.Workbooks.Add. Может разница в этом... Заранее благодарю за помощь....
0
|
1 / 1 / 0
Регистрация: 25.05.2008
Сообщений: 232
|
|
14.05.2010, 09:40 | 6 |
Странно, может я че не понимаю, но без вызова метода Excel.Quit эксель будет висеть в памяти, потому что просто вызвав Set Excel=Nothing мы уничтожаем ссылку на объект ЭКселя в нашей проге а сам эксель остается висеть в памяти. Для того, чтобы он выгрузился надо юзать метод Quit.
0
|
0 / 0 / 0
Регистрация: 10.05.2010
Сообщений: 67
|
|||||||||||
15.05.2010, 00:58 [ТС] | 7 | ||||||||||
НО, если я удаляю строки:
.HorizontalAlignment = xlCenter выскакивает ошибка (и действительно должно так быть т.к. в это время почему-то Selection = Nothing, хотя я явно его выделяю и в Excelе я вижу что выделелось). Буду благодарен, если кто-то проверит этот код: будут ли у него так как у меня??? Заранее благодарен... P.S. Если я не закрываю созданный первоначально (т.е. при первом проходе обработки события кнопки) excel, то при втором нажатии создаётся новый, туда записывается в ячейку 'А6' слово Склад, но свойства, такое ощущения, работают с первым документом Excel
0
|
1 / 1 / 0
Регистрация: 03.02.2010
Сообщений: 43
|
|
17.05.2010, 11:07 | 8 |
обязательно укажи, что Selection относится к твоему приложению Excel:
не With Selection ... End With а With oExcel.Selection ... End With
0
|
Lenivec
|
||||||
23.05.2010, 14:24 | 9 | |||||
|
5 / 5 / 0
Регистрация: 02.06.2015
Сообщений: 51
|
||||||
11.10.2016, 09:26 | 10 | |||||
Затыкается на строке
Добавлено через 3 часа 59 минут Разобрался (в моём проекте был модуль с названием "ExcelAPP" не сразу заметил)...теперь всё в порядке, с небольшими доработками код работает неплохо.
0
|
11.10.2016, 09:26 | |
11.10.2016, 09:26 | |
Помогаю со студенческими работами здесь
10
Excel остается в памяти. Как убить процесс? Не убивается процесс после закрытия Процесс висит после закрытия После закрытия приложения процесс не завершается Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |