powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как закрыть Excel???
31 сообщений из 31, показаны все 2 страниц
Как закрыть Excel???
    #32361531
Ander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чайник уже вскипел!!!
Не закрывается Excel (в смысле - "висит" в памяти) после записи в лист из VB и последующего сохранения/закрытия. Причём, даже если ничего не открывю (книгу Excel), просто команда
Range(nomerS).Value = "......" (запись в ячейку) - и Excel - в памяти. Команды
xl.Quit
Set xl = Nothing
ничего не дают. А вот закрытие программы убирает из памяти и Excel....

Чего-то я здесь серьёзно не понимаю и потому прошу помощи
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32361600
Ander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, хоть кто-нибудь! Отзовитесь!!!
Весь форум проглядел, все примеры опробовал - ВИСИТ, сволочь! (это я про Excel). Чем я его держу-то, если после откл.программы он (Excel) память освобождает???
Люди! Аууу!!!
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32361635
Фотография tpg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А DoEvents после

Set xl = Nothing

не поможет?
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32361639
Ander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробовал и DoEvents - увы.........
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32361666
Ander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чайник - он и в Африке.... Так что помогайте, люди добрые. Есть здесь гуру и прочие мастера?

ДопИнфо:
Программа периодически пишется на 2-х машинах (дома и на работе), соотв., Win'98SE/Off'97 и Win2000/Off'2000. С абсолютно идентичными результатами.....
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32361704
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я, конечно, не знаю смогу помочь или нет, но сутра, посмотрев вопрос сначала хотел чем-то помочь, а потом думаю стоит ли гадать да угадывать, время тратить?
если б вы кусок кода положили бы уж давно кто-нить ответил бы, а то помогите, а с чем помочь-то????
сорри, конечно
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32361736
Фотография PA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно уничтожить ссылки на все ёксельные объекты, а не только Application...
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32362628
Ander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Жду совета как Винни-Пух мёда

Вот кусочек кода, который предполагалось оставить как окончательный вариант. Всё работает, данные записываются куда нужно, только после завершения работы (не важно, с открытием Excel, или без, но с сохранением) - Excel "висит" в памяти, и при повторном обращении к этому кусочку программы всё выполняется без ошибок, но в таблице - пусто!

Dim xl As New excel.Application 'ссылка на библиотеку типов Excel
Dim xlb As New excel.Workbook
Dim xls As New excel.Worksheet

Set xlb = xl.Workbooks.Open(nameF)
Set xls = xlb.Worksheets.Item("Таблица")

'Заполнение ТАБЛИЦЫ
For i = 1 To kolGrupp
nomerS = "A" & Mid$(Str(kolStrok), 2, Len(Str(kolStrok)) - 1)
Range(nomerS).Value = "Группа " & Str(i)
For j = 1 To kolEP(i, 0)
kolStrok = kolStrok + 1
nomerSs = Mid$(Str(kolStrok), 2, Len(Str(kolStrok)) - 1)
nomerS = "A" & nomerSs
Range(nomerS).Value = namEP(i, j)
'и т.д. заполняется таблица по колонкам
Next
'и т.д. заполняется таблица по строкам с аналогичным кодом
Next

'Здесь - разрешение открыть Excel
'xl.Visible = True ' делаем Excel видимым
'Если Excel не открывается - запись
xlb.Save
'или
'xl.ActiveWorkbook.Save
'что вроде как одно и то же, по крайней мере записывается одинаково
'Завершение
xl.Quit
Set xl = Nothing
DoEvents

Вот, собственно, и всё.... Но даже если оставить вот так:
' ЗАРЕМИРОВАНЫ(!) все(!!!) ссылки и открывания книги и листов Excel
' только ОДНА командочка
Range(nomerS).Value = "информашка"
и далее - всё закрываем (мне так кажется)
xl.Quit
Set xl = Nothing
DoEvents
- Excel всё равно появляется в мозгах и висит там до закрытия VB-программы

"Нужно уничтожить ссылки..." ????!!!! - ведь написано жеж ж - Чайник.
Где? Что? Когда? ГосподА! Направьте на путь истинный
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32362668
Фотография tpg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что есть такое по сути Range ?
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32362753
Ander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как я наивно полагаю, Range - энто такая штука, кот. расставляет инфу в ячейки. Откуда эта Range родом - без понятия, в VB такой команды нет, может, VBA??? И вроде из-за неё и заморочки. Кусок кода взял из какого-то примера, сам не парю. Может, как-то по другому можно записывать инфу в ячейки?
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32362774
Svetlana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так делала всегда:
xlb.Close True 'т.е. сохранить изменения
xl.Quit

И все равно при разработке проги возникают проблемы.
Вот почему:
Компилится код. Тут БАХ - ошибка; останавливаешь проект. А Excel то не закрылся! Код до конца не выполнился! Потому и проблемы потом возникали - значения новые не записывались.. Вот и приходится каждый раз открывать таск и завершать Excel.exe..
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32362834
Ander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, и где ж "сермяжня правда"? Как-то же его можно "погасить"?? Ну ведь кто-то же ж умеет, а???
Слышал даже мимоходом, что нужно Application.TemplatesPath применить каким-то боком... Вот тока знать бы
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32363134
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, блин, стопудово у вас где-то еще объекты не убиваются (вам же сказали), что не удивительно, если вы сами с кодом разобраться не можете
ищите в коде места, где присутствует что-то типа
Dim xl As New excel.Application
Dim xlb As New excel.Workbook
Dim xls As New excel.Worksheet
либо
Set blablabla=CreateObject()
перед выходом все такие объекты должны убиваться
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32363917
Ander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В том-то и прикольчик, что НЕТ никаких "CreateObject". А все
Dim xl As New excel.Application
Dim xlb As New excel.Workbook
Dim xls As New excel.Worksheet
ЗАРЕМИРОВАНЫ - в примере кода - второй вариант. Соотв, нет и команд закрытия xl, xlb (заремированы).
И есть только одна строка с командой Range. И всё - появляется в мозгах Excel и висит до закрытия программы. Как убить эту штуку я как раз и не знаю.
Хотя это же очень просто. Но для тех, кто знает. Поделились бы кусочком информации, а?
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32363918
Ander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
(Продолж)
А вот если этой Range нет - то и Excel не появляется.....
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32365054
Alexander_Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я придерживаюсь мнения Уважаемого пользователя PA (высказавшегося о закрытии "всех ёксельных ссылок"), хотя сам толком в VB не кодил. Просто интуитивно как прогораммеру мне это кажется...

Я кодил только в VBA под разные офисные апплы. Но у меня есть предложение.

Dim xl As New excel.Application 'ссылка на библиотеку типов Excel
Dim xlb As New excel.Workbook
Dim xls As New excel.Worksheet

..................

Set xlb = Nothing
Set xls = Nothing
Set xl = Nothing
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32365055
Alexander_Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый Ander!

А Dim Xl As New ... тыры-пыры

и Create (тыры-пыры)

без разницы занимает память.


Я далеко не гуру, но я это предполагаю т.к. на Delphi New значит создать новый указатель

var P: ^MyType;
...
P:=New(P); // Создаем новый объект-указатель на тип MyType в памяти


А Create - создать объект, т.е. зарезервировать его в памяти. И любому Create'у должен соответствовать Free.

Но вообще-то у нас тема про VB, это я так аналогии провожу...
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32365056
Alexander_Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пардон, извиняюсь.

New(P); // просто без присваивания. меня что-то заклинило. пойду спать
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32365059
Alexander_Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что если просто

Dim X As New Excel

Дальше обращаться Excel.Application
Excel.WorkBook
Excel.WorkSheet


Set Excel = Nothing
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32365060
Alexander_Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
'Извиняюсь, предыд. не читайте!

А что если просто

Dim X As New Excel

Дальше обращаться Excel.Application
Excel.WorkBook
Excel.WorkSheet


Set X = Nothing
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32365061
Alexander_Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то я совсем уже того

'Извиняюсь, предыд. не читайте!

А что если просто

Dim X As New Excel

Дальше обращаться Excel.Application
X.WorkBook
X.WorkSheet


Set X = Nothing
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32365062
Alexander_Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dim X As New Excel



...........X.Application
.......... X.WorkBook
...........X.WorkSheet


Set X = Nothing
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32365118
Alexander_Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
____________________
Subj: From Svetlana
Я так делала всегда:
xlb.Close True 'т.е. сохранить изменения
xl.Quit

И все равно при разработке проги возникают проблемы.
Вот почему:
Компилится код. Тут БАХ - ошибка; останавливаешь проект. А Excel то не закрылся! Код до конца не выполнился! Потому и проблемы потом возникали - значения новые не записывались.. Вот и приходится каждый раз открывать таск и завершать Excel.exe..
_______________
<b>А если периодически схохранять изменения в целях отладки (в подозрительных местах поставить xlb.Save)?

Можно думаю твой код и написать так

xlb.Save
xlb.Close
xl.Quit
<\b>
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32366618
Ander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем СПАСИБО!
Хотя вопрос остался....
Всё, как указано выше, было опробовано в разных вариантах.
Вот один из них:

Dim xl As New Excel.Application
Dim xlb As New Excel.Workbook
Dim xls As New Excel.Worksheet
' ========================

Private Sub ....
Set xlb = xl.Workbooks.Open(nameF)
Set xls = xlb.Worksheets.Item("Таблица")

'Заполнение ТАБЛИЦЫ
For i = 1 To kol1
For j = 1 To kol2
Range(nomerS).Value = <инфо>
'и т.д. заполняется таблица по колонкам
Next
'и т.д. заполняется таблица по строкам с аналогичным кодом
Next

xlb.Save
xlb.Close
xl.Quit
Set xlb = Nothing
Set xls = Nothing
Set xl = Nothing
End Sub

Если принудительно обойти или запретить или заремировать цикл, т.е. не выполняется команда Range (и не заполняется таблица), то Excel благополучно выключается. Если эта команда появляется - Excel повисает в памяти до выключения программы VB. Может, каким-то другим образом можно рассовывать инфу по ячейкам? Научите, мастера! Или может всё же кто подскажет, "чего ещё нажать"? Про 3 кнопочки я уже знаю...

>Alexander_Z - чего означает
А Dim Xl As New... тыры-пыры
и Create (тыры-пыры)
- я не понял. И что это за Create ?
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32366662
Фотография AlexJuice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Create -> CreateObject (через позднее связывание).
Например:
Код: plaintext
Set EXL = CreateObject( "Excel.Application" ) ' запускаем Excel
Но эта строчка создаст новый экземпляр, даже если один уже запущен.
Впочем, и на это есть свои обходы (вызов GetObject и проверка ошибки)
Но это не обязательно.
А в приведенном примере мне непонятно, зачем нужна переменная для листа? Да и для книги, кстати, не обязательно:

Код: plaintext
1.
xl.Workbooks.Open nameF
xl.ActiveWorkbook.Sheets( "Таблица" ).Activate
и дальше заполнение идет своим чередом.

Еще не советуют использовать As New в одной строчке (вдруг поможет)
Код: plaintext
1.
Dim xl As Excel.Application
Set xl = New Excel.Application
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32367350
Ander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexJuice - сделал всё в точности, как рекомендовано

Dim xl As Excel.Application
' ========================

Private Sub ....
Set xl = New Excel.Application
xl.Workbooks.Open (nameF)
xl.Worksheets.Select ("Таблица")

'Заполнение ТАБЛИЦЫ
For i = 1 To kol1
For j = 1 To kol2
Range(nomerS).Value = <инфо>
'и т.д. заполняется таблица по колонкам
Next
'и т.д. заполняется таблица по строкам с аналогичным кодом
Next

xl.ActiveWorkbook.Save
xl.Quit
Set xl = Nothing
End Sub

И всё с тем же результатом, как описано выше. Всё из-за этой вонючей Range!
Нет ни одной строчки
Set EXL = CreateObject("Excel.Application") ' запускаем Excel
и никаких упоминаний о CreateObject
(проверено поиском по всему проекту).
И слово <Excel> упоминается только 2 раза - в сточке dim... И set...

ПРИЧЁМ! - всё это выше приведённое, перенесённое в новый проект (вот только что осенило проверить), где "больше нет никто", а только вот это самое, даёт аналогичный результат... Чего бы это означало??? Я то думал, что где-то что-то серьёзно делаю не так, а оказывается, всё, как рекомендовано. Чего ещё нажать-то?
Люди! Помоги-и-и-ите!!!
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32367650
Фотография AlexJuice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что такое nomerS и как оно соотносится с kol1 & kol2?
(Я не вижу, где здесь задается их значение)
И какого типа эти переменные?
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32367654
Фотография AlexJuice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторxl.Worksheets.Select ("Таблица")
Я же писАл:
xl.Worksheets("Таблица").Activate

ИМХО в Ёкселе происходит ошибка, которую VB не кажет (On Error есть?)
Цикл по ячейкам можно сделать так:

Код: plaintext
1.
2.
3.
4.
5.
6.
For i =  1  To kol1 
   For j =  1  To kol2 
      Cells(i, j).Value = <инфо> 
'и т.д. заполняется таблица по колонкам 
   Next 
'и т.д. заполняется таблица по строкам с аналогичным кодом 
Next 
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #32371358
kkl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
kkl
Гость
IMHO здеся какая-то глюкота с обьектами
те Range создает что-то свое сокровенное, а не работает с xl, который
Dim xl As New Excel.Application

я бы попробовал

Dim ar As Excel.Range
--дальше примерно так
Set ar = что-то про Application...Range("A1:Z1")
--и в конце
set ar.Applicatiom=Nothing

Удачи
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как закрыть Excel???
    #39927065
alexsun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
за 16 лет никто не ответил ...

Все просто. У меня работает так (Excel закрывается, в диспетчере задач его нет):

Set xlSheet = Nothing
xlApp.Quit
Set xlApp = Nothing

В программе используется Range
...
Рейтинг: 0 / 0
Как закрыть Excel???
    #39927140
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexsun
Все просто
нет, еще проще - автор сам придумал синтаксис работы с Excel и предполагает, что VB его скушает. И On Error Resume Next надо ставить только после того, как весь код отлажен и заранее известно, что все возникающие ошибки не являются ошибками обращений к объектам и исполнений конструкций. Тогда автор бы точно увидел, где рушиться программа и завершает свою работу не дойдя до очистки объектов.
1. Так обращаться нельзя:
Код: vbnet
1.
xl.Worksheets.Select ("Таблица")


правильно
Код: vbnet
1.
xl.Worksheets("Таблица").Select


а еще проще вообще ничего не выделять, ибо это лишнее. Изначально у автора так и было:
Код: vbnet
1.
2.
Set xlb = xl.Workbooks.Open(nameF)
Set xls = xlb.Worksheets.Item("Таблица")


2. VB не знает что такое Range и поэтому надо явно указывать откуда его брать:
Код: vbnet
1.
xlb.Worksheets("Таблица").Range(nomerS).Value = "какое-то значение"


а это мне изначально непонятно:
Код: vbnet
1.
nomerS = "A" & Mid$(Str(kolStrok), 2, Len(Str(kolStrok)) - 1)


что откуда берется и зачем там Mid, особенно учитывая тот факт, что kolStrok явно числовая переменная, т.к. она используется как счетчик.
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как закрыть Excel???
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]