Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / После закрытия Excel.Application в процессах подвисает Excel.EXE / 25 сообщений из 27, страница 1 из 2
12.10.2005, 15:28
    #33320388
nalbat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
Такая проблема.После работы с 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
12.10.2005, 15:55
    #33320489
Bagin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
nalbat...
Set AppExcel = CreateObject("Excel.Application")
AppExcel.Application.Workbooks.Open "xxxxxx.xls"
.................................................
AppExcel.Application.Quit
AppExcel.Application.Workbooks.Close

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

AppExcel.Application.Workbooks.Close

AppExcel.Application.Quit

Set AppExcel = Nothing
...
...
Рейтинг: 0 / 0
12.10.2005, 16:00
    #33320519
nalbat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
Ни Set AppExcel = Nothing ,ни перемена мест не помогает :(
...
Рейтинг: 0 / 0
12.10.2005, 16:02
    #33320525
значит
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
проблема в том коде, который не показан
...
Рейтинг: 0 / 0
12.10.2005, 16:03
    #33320527
nalbat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
Все равно в процессах ексель висит и закрывается(давая возможность открывать екселевские файлы) только при закрытии access...
...
Рейтинг: 0 / 0
12.10.2005, 16:03
    #33320529
nalbat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
Да там можно никакого кода и не писать....
...
Рейтинг: 0 / 0
12.10.2005, 16:04
    #33320535
если
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
nalbatДа там можно никакого кода и не писать....
значит нужно и не писать.
...
Рейтинг: 0 / 0
12.10.2005, 16:05
    #33320540
Bagin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
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
12.10.2005, 16:07
    #33320549
nalbat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
Виноват, дело действительно в ненописанном коде...буду разбираться...спасибо...
...
Рейтинг: 0 / 0
12.10.2005, 16:07
    #33320553
nalbat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
неописанном
...
Рейтинг: 0 / 0
12.10.2005, 16:57
    #33320754
nalbat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
Нашел место, которое "портит" дело. Причина в использовании ActiveCell(в любых вариациях).Только вот почему и что с этим делать...
...
Рейтинг: 0 / 0
12.10.2005, 17:00
    #33320761
Bagin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
Для чего используется "ActiveCell(в любых вариациях)"?
Покажите наконец кусок кода.
...
Рейтинг: 0 / 0
12.10.2005, 17:02
    #33320765
nalbat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
лостаточно вот вставить,скажем, хотя бы такой кусок
With ActiveCell.Font
.Bold = True
.Italic = True
End With
...
Рейтинг: 0 / 0
12.10.2005, 17:07
    #33320787
После закрытия Excel.Application в процессах подвисает Excel.EXE
об этом много-много раз писали
и в хелпе тоже

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

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

кроме всего прочего, "по правилам", ваш код должен вообще валиться при втором проходе. во всяком случае может
...
Рейтинг: 0 / 0
12.10.2005, 17:15
    #33320808
nalbat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
Спсибо
With ObjectName.ActiveCell.Font
.Bold = True
.Italic = True
End With
решило проблему...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
19.04.2017, 11:12
    #39440727
Leprotto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
Была аналогичная проблема. Тоже добавил в код эксель 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
19.04.2017, 11:17
    #39440731
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
Leprottoперестал работать экселевский кодИ где же он расположен, этот код? в модуле Access?
...
Рейтинг: 0 / 0
19.04.2017, 11:22
    #39440740
Leprotto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
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
19.04.2017, 12:05
    #39440779
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
Вот позвольте спросить - если Вы открываете файл как
Код: 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
19.04.2017, 12:25
    #39440804
После закрытия Excel.Application в процессах подвисает Excel.EXE
Что касается приведенного кода, то он должен выглядеть так:
Код: 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
19.04.2017, 13:19
    #39440868
Leprotto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
Анатолий ( Киев ),
авторно я не вижу получение следующего файла 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
19.04.2017, 13:36
    #39440878
Прогер_самоучка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
LeprottoAkina, подскажите начинающему почему "ActiveWorkbook" бред? Тормозит работу? читаем FAQ
...
Рейтинг: 0 / 0
19.04.2017, 14:00
    #39440905
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
После закрытия Excel.Application в процессах подвисает Excel.EXE
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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / После закрытия Excel.Application в процессах подвисает Excel.EXE / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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