powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите завершить процесс Excel!
22 сообщений из 22, страница 1 из 1
Помогите завершить процесс Excel!
    #39977178
MSerg1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день экспертное сообщество. Выручите пожалуйста хорошим советом.

У меня тривиальная как казалось бы задача, с листа excel срисовать данные в таблицу Access. Штука в том, что на листе шапка, это такой документик. Шапку нужно обойти. Ну это возможно, можно ее почикать, можно диапазон считываемых данных указать, есть способы.
Но! проблема в том, что всякий раз, когда я поправляю содержимое листа (ну к примеру подписываю столбцы) я не могу выйти из excel, этот процесс намертво виснет в системе и повторное выполнение процедуры валится в ошибку, делается еще одна копия процесса в памяти.
Голову уже сломал, ну что не так-то?

Dim XL As Excel.Application, WB As Excel.Workbook, WS As Excel.Worksheet

Set WB = XL.Workbooks.Open(sFile)
Set WS = WB.Worksheets("Лист1")
WS.Range(Cells(10.1), Cells(11, 11)) = "" - уберу заголовки (а что, нельзя?)

WB.Close SaveChanges:=False Уже все что можно пишу, все перепробовал
Set WB = Nothing процедура заканчивается, ошибок нет,
XL.Quit открываю процессы - висит голубчик
Set XL = Nothing повторное выполнение процедуры невозможно


Хорошо, ребята, на форуме нашел способ чтения записей с листа excel, вот такой -

db.Execute "INSERT INTO Din(Data,oTime,Stol,FName,Tab1C) SELECT F1,F2,F3,F11,F10 FROM [Лист1$A11:K" & i & "] IN '" & sFile & "' [Excel 8.0;HDR=Yes,IMEX=1]"

Работает отлично, но вот эти F1,F2,F3... это названия полей листа, они не подряд, их нужно было подписать (вот почему приходится
корректировать содержимое листа).
В примере, откуда я взял это выражение после SELECT стояло *, то есть все поля. Умные люди говорили что признак HDR это как раз индикатор, какие названия полей выбирать, свои или экскльные. Но кто-нибудь может мне сказать, КАК ОБРАТИТЬСЯ к этим полям?
Какой формат?

В итоге у меня задача, взять данные с листа начиная с 12 строки и вниз до упора, все записи какие есть, но столбцы не подряд
и не все.

В моем примере маленькая i - это как раз количество строк на листе с данными, пришлось считать. Если не считать и брать все чохом, то попадет шляпа (шапка) листа.

Простите великодушно за большой текст, буду признателен за два совета - как отцепиться от процесса Excel и как обратиться к полям таблицы Excel по их родным названиям в предложении " INSERT INTO Din(Data,oTime,Stol,FName,Tab1C) SELECT F1,F2,F3,F11,F10 FROM " вот те, между SELECT и FROM, которые мне пришлось колхозить своими.
...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39977212
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSerg1968,
.. Xl. Quit

От родителей программы более подробно тут:
тут

Но думаем вы и сами поймёте куда вставить данное коротенькое выражение)
...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39977216
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не поможет, попытайтесь объявить xl не просто as Excel. Application, а как as New Excel. Application
...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39977218
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И если совсем ничего не помогает, то:


Код: vbnet
1.
oExcel.COMAddIns([Index]).Connect = False
...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39977231
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSerg1968,
может A11 переделать на А12? в выражении "...FROM [Лист1$A11:K" & i & "] IN..."

HDR=Yes - помоему это первая строка заголовок(т.е. имя столбца), если false - все импортируемые данные - данные
"HDR=Yes;" indicates that the first row contains columnnames, not data. "HDR=No;" indicates the opposite.


Эксель висит, если в процедуре ошибка и код через эти строки
Код: vbnet
1.
2.
WB.Close false
XL.Quit


не прошел - нужно сделать обработчик ошибок и принудить код через эти строки пройти.
...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39977235
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSerg1968
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim XL As Excel.Application, WB As Excel.Workbook, WS As Excel.Worksheet

Set WB = XL.Workbooks.Open(sFile)
Set WS = WB.Worksheets("Лист1")
WS.Range(WS.Cells(10,1), WS.Cells(11, 11)) = "" '- уберу заголовки (а что, нельзя?)

WB.Close SaveChanges:=False                  'Уже все что можно пишу, все перепробовал
Set WB = Nothing                                     'процедура заканчивается, ошибок нет, 
XL.Quit                                                    'открываю процессы - висит голубчик
Set XL = Nothing                                      'повторное выполнение процедуры невозможно

...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39977251
MSerg1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko
MSerg1968,
может A11 переделать на А12? в выражении "...FROM [Лист1$A11:K" & i & "] IN..."

HDR=Yes - помоему это первая строка заголовок(т.е. имя столбца), если false - все импортируемые данные - данные
"HDR=Yes;" indicates that the first row contains columnnames, not data. "HDR=No;" indicates the opposite.


Эксель висит, если в процедуре ошибка и код через эти строки
Код: vbnet
1.
2.
WB.Close false
XL.Quit


не прошел - нужно сделать обработчик ошибок и принудить код через эти строки пройти.


Не, я проверял, пошагово, по F8 смотрел строка за строкой, точно проходит через это место.
...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39977253
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSerg1968,
Если проходит, то попробуйте грохнуть не экземпляр объекта типа xl. Quit а самый нижнеуровневый объект приложения Excel, прямо так и попробуйте:
Код: vbnet
1.
Excel. Application. Quit
...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39977260
MSerg1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Лалов
MSerg1968,
Если проходит, то попробуйте грохнуть не экземпляр объекта типа xl. Quit а самый нижнеуровневый объект приложения Excel, прямо так и попробуйте:
Код: vbnet
1.
Excel. Application. Quit



Серег, пробовал, ничего не работает. Пришлось в тупую вкорячить taskkill вот так -

sTaskName = "EXCEL.EXE"
TaskKill = CreateObject("WScript.Shell").Run("taskkill /f /im " & sTaskName, 0, True)


Процесс убивается, норм, даже кстати под обычным пользователем тоже, это некритичный несистемный, так что пользователь его убивает, что важно.
НО! Полная лажа. Сразу допустим повторяю процедуру, и вот, на строке WS.Range(Cells(10.1), Cells(11, 11)) = "" это все летит под откос с ошибкой "The remote server machine does not exist or unavailable"
То есть один прогон, нормально, второй следом - фиг! Excel закрыт. Нужно подождать, желательно закрыть Access или базу.

Я понятия не имею, что с этим делать. Почему повторный прогон криво запускает excel, что это такое... Думал, нужно другой файл выбрать - результат тот же, что кстати интересно, я думал, может сам файл где-то завис. Но он нормально открывается.
...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39977283
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТо есть один прогон, нормально, второй следом - фиг! Excel закрыт. Нужно подождать, желательно закрыть Access или базу.

Я понятия не имею, что с этим делать. Почему повторный прогон криво запускает excel, что это такое... Думал, нужно другой файл выбрать - результат тот же, что кстати интересно, я думал, может сам файл где-то завис. Но он нормально открывается.
У меня точно такое же было. После работы с Excel его экземпляр оставался висеть в памяти. Даже принудительное закрытие этого экземпляра вручную не всегда помогало. Ставил после работы команду закрытия Access, а потом входил в программу заново.

Из личного опыта.
Заметил, что такое случается, если одновременно использовать раннее (через референсы) и позднее связывание с библиотекой Excel. Недавно одну программу полностью переписал на позднее связывание - проблема исчезла.

И вопрос. У Вас есть
Код: vbnet
1.
Dim XL As Excel.Application

а где
Код: vbnet
1.
Set XL = ...

Или Вы считаете, что он не нужен?

И рекомендую прочесть Как из программы Access снять процесс возможно пригодится.
...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39977288
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss
если одновременно использовать раннее (через референсы) и позднее связывание с библиотекой Excel.
Это как?
...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39977366
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала:
Код: plaintext
1.
2.
Set XL = New Excel.Application
XL.Visible = True
Будет видно, из-за чего процесс висит.
Скорее всего какое-нибудь диалоговое окно открыто.
...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39977368
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему не выделить, с Ctrl(или сделать в Ёкселе формочку,в которой флажками отметить) подлежащие копированию поля
...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39977406
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.
Будет видно, из-за чего процесс висит.
не будет. Тут общая ошибка работы с сервером автоматизации. 22163697
все объекты и работа с их методами должна происходить непосредственно от полученного объекта сервера автоматизации (Application). Обращения к объектам, напрямую не созданным от текущего объекта сервера автоматизации, порождает дополнительные сервера, к которым из кода нет доступа. Они и остаются "висеть" в задачах.
Как-то так...
...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39977420
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court
MSerg1968
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim XL As New Excel.Application, WB As Excel.Workbook, WS As Excel.Worksheet

Set WB = XL.Workbooks.Open(sFile)
Set WS = WB.Worksheets("Лист1")
WS.Range(WS.Cells(10,1), WS.Cells(11, 11)) = "" '- уберу заголовки (а что, нельзя?)

WB.Close SaveChanges:=False                  'Уже все что можно пишу, все перепробовал
Set WB = Nothing                                     'процедура заканчивается, ошибок нет, 
XL.Quit                                                    'открываю процессы - висит голубчик
Set XL = Nothing                                      'повторное выполнение процедуры невозможно


дополню и я...
...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39977682
MSerg1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, спасибо!! Применил ваши советы

1) Добавил New к обьявлению XL application
2) Добавил ссылку на книгу при обращении, как вы мне дважды советовали WS.Cells.... Но я не сразу увидел
3) Оставил TaskKill, это мой ход, но как-то надо убрать процесс

В итоге сегодня работает без ошибок, прямо дую на воду, гоняю циклы подряд, разные пользовательские права.
Пока работает.

Спасибо огромное всем откликнувшимся
...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39977684
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSerg1968
В итоге сегодня работает без ошибок, прямо дую на воду, гоняю циклы подряд, разные пользовательские права.
Пока работает.
обработку ошибок ещё сделай, ибо тоже чревато оставшимися процессами...
...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39978903
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург
Joss
если одновременно использовать раннее (через референсы) и позднее связывание с библиотекой Excel.
Это как?

А вот так. Прописать в референсах ссылку на библиотеку Excel, и в то же время в программе писать
Код: vbnet
1.
2.
    Dim XL As Object
    Set XL = CreateObject("excel.application")
...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39978920
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Глава 4. Использование VBA в качестве клиента автоматизации
Гетц доходчиво (раннее и позднее связывание)
http://radiosit.ru/news/programmirovanie_na_visual_basic_6_i_vba_rukovodstvo_razrabotchika/2018-08-10-7714
...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39979221
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss
Панург
пропущено...
Это как?

А вот так. Прописать в референсах ссылку на библиотеку Excel, и в то же время в программе писать
Код: vbnet
1.
2.
    Dim XL As Object
    Set XL = CreateObject("excel.application")

)
...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39979237
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSerg1968

...У меня тривиальная как казалось бы задача, с листа excel срисовать данные в таблицу Access....
Может я чё не понимаю, но почему не тривиальный TransferSpreadsheet без создания объекта....
...
Рейтинг: 0 / 0
Помогите завершить процесс Excel!
    #39983438
cylindr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSerg1968
3) Оставил TaskKill, это мой ход, но как-то надо убрать процесс

Если вы во время работы откроете другую книгу, то ваш "ход" закроет и её и все остальные.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите завершить процесс Excel!
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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