powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / После закрытия Excel.Application в процессах подвисает Excel.EXE
25 сообщений из 27, страница 1 из 2
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #33320388
nalbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такая проблема.После работы с Excel файлами в процессах незавершенным остается Excel.EXE до тех пор пока не закроешь access. При этом после выполнения скажем такого кода:
Set AppExcel = CreateObject("Excel.Application")
AppExcel.Application.Workbooks.Open "xxxxxx.xls"
.................................................
AppExcel.Application.Quit
AppExcel.Application.Workbooks.Close

если попробовать открыть любой xls файл, excel подвисат, пока не закроешь access и вручную не уберешь подвисший процесс Excel.exe

Кто-нибудь знает что с этим можно сделать? Что-то еще должно быть кроме quit и close? Заранее спасибо...
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #33320489
Bagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nalbat...
Set AppExcel = CreateObject("Excel.Application")
AppExcel.Application.Workbooks.Open "xxxxxx.xls"
.................................................
AppExcel.Application.Quit
AppExcel.Application.Workbooks.Close

Set AppExcel = Nothing
...
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #33320493
переставь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
местами последние две строки для начала
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #33320516
Bagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут еще попробуйте поменять местами две строки, в итоге будет:
nalbat...
Set AppExcel = CreateObject("Excel.Application")
AppExcel.Application.Workbooks.Open "xxxxxx.xls"
.................................................

AppExcel.Application.Workbooks.Close

AppExcel.Application.Quit

Set AppExcel = Nothing
...
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #33320519
nalbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ни Set AppExcel = Nothing ,ни перемена мест не помогает :(
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #33320525
значит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проблема в том коде, который не показан
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #33320527
nalbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все равно в процессах ексель висит и закрывается(давая возможность открывать екселевские файлы) только при закрытии access...
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #33320529
nalbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да там можно никакого кода и не писать....
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #33320535
если
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nalbatДа там можно никакого кода и не писать....
значит нужно и не писать.
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #33320540
Bagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nalbat...
Set AppExcel = CreateObject("Excel.Application")
AppExcel.Application.Workbooks.Open "xxxxxx.xls"
.................................................
' Вместо:
AppExcel.Application.Workbooks.Close

' Использовать:
call AppExcel.Application.Workbooks(strWorkBookName).Close(SaveChanges:=False)
'Или
call AppExcel.Application.Workbooks(strWorkBookName).Close(SaveChanges:=True)

...
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #33320549
nalbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Виноват, дело действительно в ненописанном коде...буду разбираться...спасибо...
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #33320553
nalbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
неописанном
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #33320754
nalbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел место, которое "портит" дело. Причина в использовании ActiveCell(в любых вариациях).Только вот почему и что с этим делать...
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #33320761
Bagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для чего используется "ActiveCell(в любых вариациях)"?
Покажите наконец кусок кода.
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #33320765
nalbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
лостаточно вот вставить,скажем, хотя бы такой кусок
With ActiveCell.Font
.Bold = True
.Italic = True
End With
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #33320787
об этом много-много раз писали
и в хелпе тоже

nalbatлостаточно вот вставить,скажем, хотя бы такой кусок
With ActiveCell.Font
.Bold = True
.Italic = True
End With

не указан объект, к которому должен быть применен ActiveCell

кроме всего прочего, "по правилам", ваш код должен вообще валиться при втором проходе. во всяком случае может
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #33320808
nalbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спсибо
With ObjectName.ActiveCell.Font
.Bold = True
.Italic = True
End With
решило проблему...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #39440727
Leprotto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Была аналогичная проблема. Тоже добавил в код эксель ObjectName
и макрос аксеса заработал, но теперь перестал работать экселевский код:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub plusOn()
  Dim shtF As Worksheet
  Set shtF = ThisWorkbook.Sheets("Функции")
  
  If ObjectName.ActiveCell.Value = "+" Then
    shtF.Range("E1").Value = ObjectName.ActiveCell.Offset(0, -2).Value
    shtF.Range("E2").Value = ObjectName.ActiveCell.Offset(0, -1).Value
  Else
    Exit Sub
  End If
  
  'и тд...
End Sub


Цитата коллег с форума по эксель:
авторActiveCell - это активная ячейка. Она в книге одна, и расположена всегда на активном листе.

Добавление чего-либо, ничего, кроме ошибки, не даст.
В вашем коде ObjectName - это не что-либо из языка VBA, а просто произвольная переменная.
Что-то я запутался ((
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #39440731
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leprottoперестал работать экселевский кодИ где же он расположен, этот код? в модуле Access?
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #39440740
Leprotto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, нет. В файле эксель, который открывает код акса:
Код: vbnet
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.
Sub importPrescriptsWithControl()
   Dim sFile, sPath, sFileName, sFolder
   Dim idPreCon As Long
   Dim rst As Recordset
   Dim fd As FileDialog
   Dim appExcel As Object
   Set fd = Application.FileDialog(msoFileDialogFolderPicker)
   
   With fd
      If .Show = False Then Exit Sub
      .AllowMultiSelect = False
      sFolder = .SelectedItems(1)
   End With
   
   sPath = sFolder & "\" & "*.xlsm"
   sFile = Dir(sPath)
   sFileName = sFolder & "\" & sFile
  
  Set appExcel = CreateObject("excel.application")
    Do While sFile <> ""
       appExcel.Workbooks.Open (sFileName)
      idPreCon = appExcel.Worksheets("Функции").Range("R57").Value
      Set rst = CurrentDb.OpenRecordset("SELECT * FROM tPrescripts WHERE idPrescript = " & CStr(idPreCon))
      appExcel.ActiveWorkbook.Close False '!!!! ЗАВИСАЛ ТУТ !!!!
      appExcel.Quit
      
      If rst.RecordCount = 0 Then
        MsgBox "вставка"
      Else
        MsgBox "уже есть"
      End If
    Loop
End Sub
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #39440779
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот позвольте спросить - если Вы открываете файл как
Код: vbnet
1.
appExcel.Workbooks.Open (sFileName)


то что мешает создать переменную типа Excel.Workbook, сделать
Код: vbnet
1.
Set wbkExcel = appExcel.Workbooks.Open(sFileName)


и затем работать с конкретным объектом-книгой, не ссылаясь на такой бред как ActiveWorkbook?

А затем сделать ещё один логический шаг, и вообще не дёргать за Excel, просто получая сразу требуемое значение
Код: vbnet
1.
idPreCon = CurrentDb.OpenRecordset("SELECT * FROM [Функции$R57:R57] IN '" & sFileName & "'[Excel 12.0; HDR=No;").Fields(0)
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #39440804
Что касается приведенного кода, то он должен выглядеть так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
...
      Set WrkBk = appExcel.Workbooks.Open(sFileName)
      idPreCon = WrkBk.Worksheets("Функции").Range("R57").Value
      Set WrkBk = Nothing 'Но можно и без этого
      appExcel.Quit
      Set rst = CurrentDb.OpenRecordset("SELECT * FROM tPrescripts WHERE idPrescript = " & CStr(idPreCon))
...

К тому же у вас есть цикл Do While sFile <> "", но я не вижу получение следующего файла sFile = Dir(): sFileName = sFolder & "\" & sFile, к тому же внутри цикла вы закрываете Excel. Т.е. вы обращаетесь к одному и тому же файлу бесконечно, но уже при втором проходе ваш excel.application отсутствует.

А вообще, если вся задача в чтении определенной ячейки с листа, то это можно сделать проще и быстрее.
Код: sql
1.
"SELECT * FROM [Функции$R57] IN '" & sFileName & "' [Excel 12.0;HDR=NO;ImEx=1]"

Этот запрос вернет одну строку с одним полем F1 из xlsm файла.
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #39440868
Leprotto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ( Киев ),
авторно я не вижу получение следующего файла sFile = Dir
есть я просто обрезал в сообщении.
авторесли вся задача в чтении определенной ячейки с листа
нет, в ячейке R57 контрольное значение. Если оно корректно, то далее импорт данных из трех листов.
авторвнутри цикла вы закрываете Excel
да, Вы правы, закрывать надо после цикла.
Akina, подскажите начинающему почему "ActiveWorkbook" бред? Тормозит работу?
Анатолий ( Киев ) и Akina, благодарю Вас. Саб заработал, единственное не понял почему ругается на
Код: vbnet
1.
Dim wbkExcel As Excel.Workbook


авторто что мешает создать переменную типа Excel.Workbook ???
Без объявления типа переменной все работает:
Код: vbnet
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.
45.
Option Compare Database
Option Explicit
Sub importTEST()
   Dim sFile, sPath, sFileName, sFolder
   Dim idPreCon As Long
   Dim rst As Recordset
   Dim fd As FileDialog
   Dim appExcel As Object
   Dim wbkExcel 'As Excel.Workbook или As Workbook - на это ругается!
  
   Set fd = Application.FileDialog(msoFileDialogFolderPicker)
   
   With fd
      If .Show = False Then Exit Sub
      .AllowMultiSelect = False
      sFolder = .SelectedItems(1)
   End With
   
   sPath = sFolder & "\" & "*.xlsm"
   sFile = Dir(sPath)
   sFileName = sFolder & "\" & sFile
  
  Set appExcel = CreateObject("excel.application")
    Do While sFile <> ""
      Set wbkExcel = appExcel.Workbooks.Open(sFileName)
      idPreCon = wbkExcel.Worksheets("Функции").Range("R57").Value
      'Set wbkExcel = Nothing 'Но можно и без этого
      Set rst = CurrentDb.OpenRecordset("SELECT * FROM tPrescripts WHERE idPrescript = " & CStr(idPreCon))
      wbkExcel.Close False
      
        If rst.RecordCount = 0 Then
        'импорт с первого листа
          Call DoCmd.TransferSpreadsheet(acImport, acSpreadsheetTypeExcel12, _
              "tPrescripts", sFileName, True, "requisites")
        'аналогичный импорт со второго листа ...
        'аналогичный импорт с третьего листа ...
        Else
          MsgBox "уже есть"
        End If
        
      sFile = Dir
    Loop
  appExcel.Quit
  
End Sub
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #39440878
Прогер_самоучка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeprottoAkina, подскажите начинающему почему "ActiveWorkbook" бред? Тормозит работу? читаем FAQ
...
Рейтинг: 0 / 0
После закрытия Excel.Application в процессах подвисает Excel.EXE
    #39440905
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leprottoне понял почему ругается на
Код: vbnet
1.
Dim wbkExcel As Excel.Workbook

Ну вероятно потому, что тупо не подключена референсная библиотека. А если её подключить, то и appExcel можно определить конкретным типом Excel.Application, и создавать не через CreateObject, а простым Set New.

Кстати... вот зря Вы это делаете:
Leprotto
Код: vbnet
1.
If rst.RecordCount = 0 Then

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


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