|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
Чайник уже вскипел!!! Не закрывается Excel (в смысле - "висит" в памяти) после записи в лист из VB и последующего сохранения/закрытия. Причём, даже если ничего не открывю (книгу Excel), просто команда Range(nomerS).Value = "......" (запись в ячейку) - и Excel - в памяти. Команды xl.Quit Set xl = Nothing ничего не дают. А вот закрытие программы убирает из памяти и Excel.... Чего-то я здесь серьёзно не понимаю и потому прошу помощи ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2003, 06:30 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
Ну, хоть кто-нибудь! Отзовитесь!!! Весь форум проглядел, все примеры опробовал - ВИСИТ, сволочь! (это я про Excel). Чем я его держу-то, если после откл.программы он (Excel) память освобождает??? Люди! Аууу!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2003, 09:39 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
А DoEvents после Set xl = Nothing не поможет? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2003, 10:06 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
Пробовал и DoEvents - увы......... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2003, 10:10 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
Чайник - он и в Африке.... Так что помогайте, люди добрые. Есть здесь гуру и прочие мастера? ДопИнфо: Программа периодически пишется на 2-х машинах (дома и на работе), соотв., Win'98SE/Off'97 и Win2000/Off'2000. С абсолютно идентичными результатами..... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2003, 10:25 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
я, конечно, не знаю смогу помочь или нет, но сутра, посмотрев вопрос сначала хотел чем-то помочь, а потом думаю стоит ли гадать да угадывать, время тратить? если б вы кусок кода положили бы уж давно кто-нить ответил бы, а то помогите, а с чем помочь-то???? сорри, конечно ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2003, 10:46 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
Нужно уничтожить ссылки на все ёксельные объекты, а не только Application... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2003, 11:02 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
Жду совета как Винни-Пух мёда Вот кусочек кода, который предполагалось оставить как окончательный вариант. Всё работает, данные записываются куда нужно, только после завершения работы (не важно, с открытием 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-программы "Нужно уничтожить ссылки..." ????!!!! - ведь написано жеж ж - Чайник. Где? Что? Когда? ГосподА! Направьте на путь истинный ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2003, 03:50 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
А что есть такое по сути Range ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2003, 07:30 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
Как я наивно полагаю, Range - энто такая штука, кот. расставляет инфу в ячейки. Откуда эта Range родом - без понятия, в VB такой команды нет, может, VBA??? И вроде из-за неё и заморочки. Кусок кода взял из какого-то примера, сам не парю. Может, как-то по другому можно записывать инфу в ячейки? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2003, 09:55 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
Я так делала всегда: xlb.Close True 'т.е. сохранить изменения xl.Quit И все равно при разработке проги возникают проблемы. Вот почему: Компилится код. Тут БАХ - ошибка; останавливаешь проект. А Excel то не закрылся! Код до конца не выполнился! Потому и проблемы потом возникали - значения новые не записывались.. Вот и приходится каждый раз открывать таск и завершать Excel.exe.. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2003, 10:15 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
Ну, и где ж "сермяжня правда"? Как-то же его можно "погасить"?? Ну ведь кто-то же ж умеет, а??? Слышал даже мимоходом, что нужно Application.TemplatesPath применить каким-то боком... Вот тока знать бы ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2003, 10:53 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
да, блин, стопудово у вас где-то еще объекты не убиваются (вам же сказали), что не удивительно, если вы сами с кодом разобраться не можете ищите в коде места, где присутствует что-то типа Dim xl As New excel.Application Dim xlb As New excel.Workbook Dim xls As New excel.Worksheet либо Set blablabla=CreateObject() перед выходом все такие объекты должны убиваться ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2003, 13:18 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
В том-то и прикольчик, что НЕТ никаких "CreateObject". А все Dim xl As New excel.Application Dim xlb As New excel.Workbook Dim xls As New excel.Worksheet ЗАРЕМИРОВАНЫ - в примере кода - второй вариант. Соотв, нет и команд закрытия xl, xlb (заремированы). И есть только одна строка с командой Range. И всё - появляется в мозгах Excel и висит до закрытия программы. Как убить эту штуку я как раз и не знаю. Хотя это же очень просто. Но для тех, кто знает. Поделились бы кусочком информации, а? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2003, 04:48 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
(Продолж) А вот если этой Range нет - то и Excel не появляется..... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2003, 04:53 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
Я придерживаюсь мнения Уважаемого пользователя 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2003, 02:51 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
Уважаемый Ander! А Dim Xl As New ... тыры-пыры и Create (тыры-пыры) без разницы занимает память. Я далеко не гуру, но я это предполагаю т.к. на Delphi New значит создать новый указатель var P: ^MyType; ... P:=New(P); // Создаем новый объект-указатель на тип MyType в памяти А Create - создать объект, т.е. зарезервировать его в памяти. И любому Create'у должен соответствовать Free. Но вообще-то у нас тема про VB, это я так аналогии провожу... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2003, 03:04 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
Пардон, извиняюсь. New(P); // просто без присваивания. меня что-то заклинило. пойду спать ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2003, 03:08 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
А что если просто Dim X As New Excel Дальше обращаться Excel.Application Excel.WorkBook Excel.WorkSheet Set Excel = Nothing ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2003, 03:26 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
'Извиняюсь, предыд. не читайте! А что если просто Dim X As New Excel Дальше обращаться Excel.Application Excel.WorkBook Excel.WorkSheet Set X = Nothing ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2003, 03:27 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
Что-то я совсем уже того 'Извиняюсь, предыд. не читайте! А что если просто Dim X As New Excel Дальше обращаться Excel.Application X.WorkBook X.WorkSheet Set X = Nothing ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2003, 03:28 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
Dim X As New Excel ...........X.Application .......... X.WorkBook ...........X.WorkSheet Set X = Nothing ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2003, 03:30 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
____________________ Subj: From Svetlana Я так делала всегда: xlb.Close True 'т.е. сохранить изменения xl.Quit И все равно при разработке проги возникают проблемы. Вот почему: Компилится код. Тут БАХ - ошибка; останавливаешь проект. А Excel то не закрылся! Код до конца не выполнился! Потому и проблемы потом возникали - значения новые не записывались.. Вот и приходится каждый раз открывать таск и завершать Excel.exe.. _______________ <b>А если периодически схохранять изменения в целях отладки (в подозрительных местах поставить xlb.Save)? Можно думаю твой код и написать так xlb.Save xlb.Close xl.Quit <\b> ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2003, 11:27 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
Всем СПАСИБО! Хотя вопрос остался.... Всё, как указано выше, было опробовано в разных вариантах. Вот один из них: 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 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2003, 10:07 |
|
Как закрыть Excel???
|
|||
---|---|---|---|
#18+
Create -> CreateObject (через позднее связывание). Например: Код: plaintext
Впочем, и на это есть свои обходы (вызов GetObject и проверка ошибки) Но это не обязательно. А в приведенном примере мне непонятно, зачем нужна переменная для листа? Да и для книги, кстати, не обязательно: Код: plaintext 1.
Еще не советуют использовать As New в одной строчке (вдруг поможет) Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2003, 10:52 |
|
|
start [/forum/topic.php?fid=60&msg=32362668&tid=2154832]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 269ms |
total: | 401ms |
0 / 0 |