Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблема с завершением процесса Excel / 5 сообщений из 5, страница 1 из 1
11.03.2016, 09:53
    #39189663
mr. Shu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с завершением процесса Excel
Добрый день!

Есть проблема с завершением процесса Excel после считывания данных с листа из Access. Перечитал кучу форумов наших и не наших, но решения так и не нашлось. Что бы я ни делал ничего не помогает. Привожу пример кода, может у кого-то появятся свежие идеи:

Код: 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.
Public Sub Open_Click()

Dim dlgOpenFile As Object
Dim OTT As Variant
Dim sFile As String
Dim oXL As Excel.Application, oWB As Excel.Workbook, oWS As Excel.Worksheet 

Set oXL = CreateObject("Excel.Application")

Set dlgOpenFile = Application.FileDialog(3)
  With dlgOpenFile
      .Filters.Add "Файлы Excel", "*.xls, *.xlsx, *.xlsb, *.xlsm", 1
      .InitialFileName = CurrentProject.Path
      .AllowMultiSelect = False
      .Title = "Выберите файл"
          If (.Show = -1) And (.SelectedItems.Count > 0) Then
            sFile = .SelectedItems(1)
          End If
  End With
Set dlgOpenFile = Nothing
 
If sFile = "" Then
    Exit Sub
End If

Set oWB = oXL.Workbooks.Open(sFile)
Set oWS = oWB.Sheets(1)

OTT = oWS.Range(oWS.Cells(1, 1), oWS.Cells(500, 30))

Set oWS = Nothing
oWB.Close
Set oWB = Nothing
oXL.Quit
Set oXL = Nothing
...
Рейтинг: 0 / 0
11.03.2016, 11:06
    #39189753
Проблема с завершением процесса Excel
mr. ShuOTT = oWS.Range(oWS.Cells(1, 1), oWS.Cells(500, 30))
Что будет с процессом, если эту строку закомментировать?
А так? OTT = oWS.Range(oWS.Cells(1, 1), oWS.Cells(500, 30)) .Value
...
Рейтинг: 0 / 0
11.03.2016, 11:46
    #39189797
mr. Shu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с завершением процесса Excel
Анатолий ( Киев ),
Ваше исправление кода решило проблему. Теперь все работает корректно.

Спасибо огромное за помощь!

Только не могу понять в чем разница, т.к. моим способом данные тоже загружались в память.
...
Рейтинг: 0 / 0
11.03.2016, 13:34
    #39189995
Проблема с завершением процесса Excel
mr. ShuТолько не могу понять в чем разница, т.к. моим способом данные тоже загружались в память. Давайте порассуждаем...
Обращение к oWS.Range(oWS.Cells(1, 1), oWS.Cells(500, 30)) - это неявное создание трех объектов Range.
Если написать Set OTT = oWS.Range(...), то в OTT вы получите объект Range, которому после использования надо тоже делать Nothing.

Если OTT = oWS.Range(...).Value, то Range возвращает массив значений, считает миссию выполненной и благополучно рассасывается.

А в вашем варианте Range использует значение по умолчанию (Value), но остается в памяти, ожидая других обращений к себе.

Кстати, у вас действительно 500 строк и 30 столбцов? Может проще использовать конструкцию
OTT = oWS.UsedRange.Value ?
...
Рейтинг: 0 / 0
11.03.2016, 14:26
    #39190059
mr. Shu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с завершением процесса Excel
Анатолий ( Киев )Если OTT = oWS.Range(...).Value, то Range возвращает массив значений, считает миссию выполненной и благополучно рассасывается.

А в вашем варианте Range использует значение по умолчанию (Value), но остается в памяти, ожидая других обращений к себе.

Спасибо. Теперь разобрался

Анатолий ( Киев )Кстати, у вас действительно 500 строк и 30 столбцов? Может проще использовать конструкцию
OTT = oWS.UsedRange.Value ?
Скажем, с UsedRange массив не сильно уменьшится. Но совет очень кстати.

На самом деле мне нужна определенная область листа, но ее местоположение не является постоянным. При этом данные в подавляющем большинстве случаев находятся в том диапазоне который я использую. Далее я уточняю границы диапазона и передаю его из массива в recordset.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблема с завершением процесса Excel / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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