powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Можно ли из программы Access снять процесс?
25 сообщений из 28, страница 1 из 2
Можно ли из программы Access снять процесс?
    #38851302
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая проблема.
При работе программа использует объект Excel для загрузки данных из книг Excel.
Код
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    Dim XL As Object
   Set XL = CreateObject("excel.application")
   XL.Workbooks.Open MyFile
' снятие защиты
   If XL.Worksheets(1).Protect = True Then
      XL.Worksheets(1).Unprotect Password:="xxxxxx"
   End If
   DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "22_temp_plan", MyFile, , "A13:N700"
   XL.ActiveWindow.Close SaveChanges:=False
   Set XL = Nothing


Хотя я делаю и Close и Nothing процесс Excel всё равно остаётся в памяти. Чтоб его снять надо закрыть программу. А это неудобно. Есть ли способ снять процесс из программы VBA?

Понимаю, что тут надо использовать системные вещи, но в этом я не силён.


-------------------------------------------------------------
А ты вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса?
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38851312
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38851314
Фотография nord-woolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XL.Quit
?
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38851416
Фотография гурД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss,

Nothing - вы освобождаете место на диске, зарезервированное (объектной) переменной; Close - то ли прекращаете (под)процесс ресурса, взятого непосредственно в Access из Excell, то ли напрямую экземпляра Excell (точно не помню).
Собственно Excell - это исполняющийся программный код, - то есть (основной) процесс, стоящий в очереди на исполнение. Чтобы вообще не было процессов Excell - то да:
авторXL.Quit
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38851419
Фотография гурД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну то есть закрывать программу, которая, если открыта, - то это по любому процесс
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38851422
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Буду проверять. Но только в понедельник. Программа на работе.
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38851446
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JossКод
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    Dim XL As Object
   Set XL = CreateObject("excel.application")
   XL.Workbooks.Open MyFile
' снятие защиты
   If XL.Worksheets(1).Protect = True Then
      XL.Worksheets(1).Unprotect Password:="xxxxxx"
   End If
   DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "22_temp_plan", MyFile, , "A13:N700"
   XL.ActiveWindow.Close SaveChanges:=False
   Set XL = Nothing



Логика этого кусочка кода показалась мне довольно странной. Может оно на самом деле всё проще (а может и показалось :) )
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38851449
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nord-woolf,

Наверно да...
nord-woolfXL.Quit

А то я такую ссылку дал, что если тупо Notepad.exe поменять на EXCEL.EXE
то у всей конторы закроется эксель... во прикол будет... нужно будет де нить юзнуть втихаря в людном месте...
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38851945
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обломс. Вставил XL.Quit - ничего не получилось..
Код: vbnet
1.
2.
3.
4.
...
   XL.ActiveWindow.Close SaveChanges:=False
   XL.Quit
   Set XL = Nothing

Процесс по прежнему висит в системе плак...плак... плак...
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38851949
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закрываю полностью задачу вместе с Access. Процесс всё равно висит в списке...
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38852035
interesno5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Joss,
Вот тут тоже была похожая проблема http://club.directum.ru/post/Postroenie-otchjotov-Reshenie-problemy-s-zavisaniem-processov-Excel.aspx

Странно, че-то я не смог зайти как обычно на форум, пришлось с заду...
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38852062
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimportJossКод
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    Dim XL As Object
   Set XL = CreateObject("excel.application")
   XL.Workbooks.Open MyFile
' снятие защиты
   If XL.Worksheets(1).Protect = True Then
      XL.Worksheets(1).Unprotect Password:="xxxxxx"
   End If
   DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "22_temp_plan", MyFile, , "A13:N700"
   XL.ActiveWindow.Close SaveChanges:=False
   Set XL = Nothing



Логика этого кусочка кода показалась мне довольно странной. Может оно на самом деле всё проще (а может и показалось :) )
Действительно, зачем эти телодвижения со снятием защиты? Файл то не сохрняется, а то что в процессе висит ни как не используется в DoCmd. Хотя... может не весь код приведён...

Предложение. Написать весь код с объявлением объектов и приведением типов. Потом уже сократить и отключить...
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38852284
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
\\\\guest_rusimportпропущено...

Логика этого кусочка кода показалась мне довольно странной. Может оно на самом деле всё проще (а может и показалось :) )
Действительно, зачем эти телодвижения со снятием защиты? Файл то не сохрняется, а то что в процессе висит ни как не используется в DoCmd. Хотя... может не весь код приведён...

Предложение. Написать весь код с объявлением объектов и приведением типов. Потом уже сократить и отключить...Я просто дорабатываю чужую программу. Разработчик указал снятие защиты и я его оставил. Я не проверял, как данные будут считываться при установленной защите. Возможно, что она ни на что и не влияет. А может и влияет. Нужна проверка. Сейчас произведу.
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38852307
Bryk_Alien
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Убийство:
яваскриптик
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
var
 WMI,
 SQuery,
 Processes,
 Process,
 WshShell;

var vbCritical = 16;

WshShell = WScript.CreateObject("Wscript.Shell");

try
{
 WMI = GetObject("winMgmts:");
}

catch(e)
{
 if(e != 0)
 {
  Mess = "Ошибка при соединении с WMI";
  WshShell.Popup(Mess, 0, "Закрытие службы рассылки guisend.exe", vbCritical);
  WScript.Quit();
 }
}

SQuery = "SELECT * FROM Win32_Process WHERE Name = 'guisend.exe'";

Processes = new Enumerator(WMI.ExecQuery(SQuery));

while (!Processes.atEnd())
{
 Process = Processes.item();
 try
 {
  Process.Terminate();
 }
 catch(e)
 {
  Mess = "Ошибка при закрытии текущего экземпляра";
  WshShell.Popup(Mess, 0, "Закрытие службы рассылки guisend.exe", vbCritical);
 }
 Processes.moveNext();
}

...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38852473
osmor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss\\\\пропущено...

Действительно, зачем эти телодвижения со снятием защиты? Файл то не сохрняется, а то что в процессе висит ни как не используется в DoCmd. Хотя... может не весь код приведён...

Предложение. Написать весь код с объявлением объектов и приведением типов. Потом уже сократить и отключить...Я просто дорабатываю чужую программу. Разработчик указал снятие защиты и я его оставил. Я не проверял, как данные будут считываться при установленной защите. Возможно, что она ни на что и не влияет. А может и влияет. Нужна проверка. Сейчас произведу.
Может отказаться от DoCmd.TransferSpreadsheet acImport и заменить его на CopyFromRecordset ?
Есть подозрение, что проблема именно в совместном использовании.
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38852482
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
osmorМожет отказаться от DoCmd.TransferSpreadsheet acImport и заменить его на CopyFromRecordset ?
Есть подозрение, что проблема именно в совместном использовании.Попробую.
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38852496
Прогер_самоучка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JossКод
Код: vbnet
1.
2.
3.
    Dim XL As Object
   Set XL = CreateObject("excel.application")
   XL.Workbooks.Open MyFile

А если попробовать открыть с параметром только для чтения ReadOnly ?
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38853271
energy75
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно лучше правильно закончить работу макроса, чем применять костыли.

Но бывает, что и без костылей никак...

Поэтому, мож пригодиться:
1.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public Function Kill_Proc() As Boolean
Dim Proc As Object


Kill_Proc = False
For Each Proc In GetObject("winmgmts:").ExecQuery("Select * from Win32_Proc")
If Proc.Caption Like "EXCEL.EXE" Then
Kill_Proc = True
Proc.Terminate
Exit For
End If
Next
End Function



2.
Код: vbnet
1.
2.
3.
4.
Public Sub killTask()
killString = "taskkill /F /IM excel.exe"
Call Shell(killString, vbHide)
End Sub



Ну и чуть для других потребностей:
3.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Public Function DetectExcel() As Long
   ' Procedure dectects a running Excel and registers it.
   Const WM_USER = 1024
   Dim hwnd As Long
   ' If Excel is running this API call returns its handle.
   hwnd = FindWindow("XLMAIN", 0)
   If hwnd = 0 Then   ' 0 means Excel not running.
      Exit Function
   Else
      ' Excel is running so use the SendMessage API
      ' function to enter it in the Running Object Table.
     SendMessage hwnd, WM_USER + 18, 0, 0
     DetectExcel = hwnd
   End If
End Function
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38853308
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прогер_самоучкаА если попробовать открыть с параметром только для чтения ReadOnly ?

Не влияет.
Пока тупо прицепил перед выходом из подпрограммы
Код: vbnet
1.
Shell("TASKKILL /F /IM Excel.exe /T")

Если открыто несколько процессов Excel, то вырубаются все. Надо или предупреждать пользователей об этой особенности, либо попробовать узнать PID создаваемого процесса и убивать конкретно его.

Это костыли и как образец программирования не годится. Меня просто загнали в угол сроками. Но разобраться надо.
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38853468
Прогер_самоучка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss,
совет на авось, но вдруг. Завершить "все дела" с объектом и только потом
Код: vbnet
1.
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "22_temp_plan", MyFile, , "A13:N700"
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38853669
Фотография гурД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JossОбломс. Вставил XL.Quit - ничего не получилось..
Код: vbnet
1.
2.
3.
4.
...
   XL.ActiveWindow.Close SaveChanges:=False
   XL.Quit
   Set XL = Nothing

Процесс по прежнему висит в системе плак...плак... плак...
Вызванный вами процесс вы закрыли (это легко проверить, справляясь в диспетчер задач). Возможно, висят другие аналогичные: автозагрузку, планировщик не смотрели?
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38853766
interesno5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38853804
Прогер_самоучка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гурДJossОбломс. Вставил XL.Quit - ничего не получилось..
Код: vbnet
1.
2.
3.
4.
...
   XL.ActiveWindow.Close SaveChanges:=False
   XL.Quit
   Set XL = Nothing


Процесс по прежнему висит в системе плак...плак... плак...
Вызванный вами процесс вы закрыли (это легко проверить, справляясь в диспетчер задач). Возможно, висят другие аналогичные: автозагрузку, планировщик не смотрели?он, он... была такая же история.
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38856189
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прогер_самоучкаJoss,
совет на авось, но вдруг. Завершить "все дела" с объектом и только потом
Код: vbnet
1.
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "22_temp_plan", MyFile, , "A13:N700"

Стоит попробовать. Но уже на следующей неделе.
...
Рейтинг: 0 / 0
Можно ли из программы Access снять процесс?
    #38856241
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прогер_самоучкаJoss,
совет на авось, но вдруг. Завершить "все дела" с объектом и только потом
Код: vbnet
1.
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "22_temp_plan", MyFile, , "A13:N700"


Зацепило. Отложил всё и засел за проверку. Результаты проверки

Если использовать команду
Код: vbnet
1.
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "22_temp_plan", MyFile, , "A13:N700"

после того, как закрыт объект Excel, то всё проходит на ОТЛИЧНО !!!
Вешал программу, аналогичную диспетчеру задач поверх всех окон запускал свою подпрограмму сначала пошагово, а потом без остановок. Хорошо видно, как сначала появляется процесс, а потом удаляется. Прокрутил раз 5 со всеми вариантами. Всё закрывается.

Отсюда вывод: При открытом объекте Excel нельзя использовать команды импорта и экспорта данных из Excel-файлов. (Ну про экспорт я уже написал без проверки. Хотя аналогичная ситуация есть и там. Надо проверить, но пока не доходят руки.)

Большое спасибо Прогеру за идею!

Примечание. Наличие защиты на листе Excel не влияет на возможность импорта информации оператором DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9 в базу данных
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Можно ли из программы Access снять процесс?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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