|
0 / 0 / 0
Регистрация: 10.05.2010
Сообщений: 67
|
||||||
После закрытия Excel процесс остается10.05.2010, 01:41. Показов 9561. Ответов 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 | ||||||
|
Чтобы объект экселя не висел в памяти необходимо выполнить такой код:
oExcel.Quit Set oExcel=Nothing Но т.к. Вы определяете эксель в процедуре нажатия на кнопку и уничтожаете там же, то объект экселя будет жить пока выполняется процедура. Надо, наверное, определить эксель как глобальную переменную в модуле. Я делаю так: В модуле -
Эта методика работает и я юзаю только свой эксель, не зависимо от того запущены ли еще эксели пользователя. Может что то не так, тогда пусть народ поправит. Буду признателен.
0
|
||||||
|
0 / 0 / 0
Регистрация: 10.05.2010
Сообщений: 67
|
||||||
| 12.05.2010, 21:56 [ТС] | ||||||
|
Огромное спасибо за помощь, только у меня ещё один вопросик:
Вот я написал так, как Вы посоветывали, только у меня выдаётся ошибка на строке:
'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 | |
|
если объявление функции написано в форме, то надо объявить с 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 [ТС] | |
|
Спасибо, 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 | |
|
Странно, может я че не понимаю, но без вызова метода Excel.Quit эксель будет висеть в памяти, потому что просто вызвав Set Excel=Nothing мы уничтожаем ссылку на объект ЭКселя в нашей проге а сам эксель остается висеть в памяти. Для того, чтобы он выгрузился надо юзать метод Quit.
0
|
|
|
0 / 0 / 0
Регистрация: 10.05.2010
Сообщений: 67
|
|||||||||||
| 15.05.2010, 00:58 [ТС] | |||||||||||
НО, если я удаляю строки:
.HorizontalAlignment = xlCenter выскакивает ошибка (и действительно должно так быть т.к. в это время почему-то Selection = Nothing, хотя я явно его выделяю и в Excelе я вижу что выделелось). Буду благодарен, если кто-то проверит этот код: будут ли у него так как у меня??? Заранее благодарен... P.S. Если я не закрываю созданный первоначально (т.е. при первом проходе обработки события кнопки) excel, то при втором нажатии создаётся новый, туда записывается в ячейку 'А6' слово Склад, но свойства, такое ощущения, работают с первым документом Excel
0
|
|||||||||||
|
1 / 1 / 0
Регистрация: 03.02.2010
Сообщений: 43
|
|
| 17.05.2010, 11:07 | |
|
обязательно укажи, что Selection относится к твоему приложению Excel:
не With Selection ... End With а With oExcel.Selection ... End With
0
|
|
|
Lenivec
|
||||||
| 23.05.2010, 14:24 | ||||||
|
||||||
|
5 / 5 / 0
Регистрация: 02.06.2015
Сообщений: 51
|
||||||||
| 11.10.2016, 09:26 | ||||||||
Добавлено через 3 часа 59 минут
0
|
||||||||
| 11.10.2016, 09:26 | |
|
Помогаю со студенческими работами здесь
10
После закрытия форма остается висеть в памяти Excel остается в памяти. Как убить процесс? Не убивается процесс после закрытия
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Рецензия / Мнение
Это мой обзор планшета X220 с точки зрения школьника.
Недавно я решила попытаться уменьшить свой. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|