Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
54 / 0 / 0
Регистрация: 18.02.2015
Сообщений: 12

"Висящий" процесс Excel.exe

20.10.2015, 14:22. Показов 2743. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, господа!
Возник следующий вопрос...

Ситуация: запускаем свежеиспеченный прожект.ехе, жмякаем по кнопочке, программа обрабатывает файл формата .xls, производит необходимые подсчеты, вносит данные в этот файл, сохраняет и закрывает его.

Пробелма в следующем, при любом раскладе всегда остается "висящим" процесс excel.exe, который завершается только после того, как будет закрыта сама программа прожект.ехе.

Как можно закрыть этот процесс, не завершая работу прожект.ехе (все бы ничего, да вот только этот процесс не позволяет запускать другие файлы формата .xls, они просто зависают при запуске - если запускать эти файлы самостоятельно, напрямую через офис эксель)

файлы .xls открываются и закрываются следующим образом:

Visual Basic
1
2
3
4
5
6
Workbooks.Open FileName:="С:\файл1.xls"
------------------------------------------------
обрабатываем файлик
------------------------------------------------
ActiveWorkbook.SaveAs FileName:="С:\файл1.xls"
ActiveWorkbook.Close SaveChanges:=False
п.с. на картинке показано какие библиотеки подключены..
п.с.с. команда Application.Quit - не помогает убить процесс.



Спасибо за советы\подсказки!!!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.10.2015, 14:22
Ответы с готовыми решениями:

CreateObject("Excel.Application"), процесс Excel продолжает висеть в диспетчере, когда это уже не нужно
Уважаемые Модераторы все остальные ! Прошу Вас помогите Программа срабатывает при активизации формы, с помощью ...

Завершить процесс explorer.exe
Всем привет! Проблема следующая: мне необходимо завершить процесс с именем explorer.exe (зачем? это другой вопрос), с помощью 'Диспетчера...

Отключить висящий sqlplus.exe
Добрый день, есть батник содержащий команду sqlplus.exe testbd/testbd0@bd @test > D:/test.txt Как сделать, что при возникновении ошибки,...

8
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
20.10.2015, 14:30
Цитата Сообщение от Robocoper Посмотреть сообщение
файлы .xls открываются и закрываются следующим образом
И что, прям в проекте VB6 работает вот это "Workbooks", "ActiveWorkbook"?
Тогда туда же
Visual Basic
1
Application.Quit
0
54 / 0 / 0
Регистрация: 18.02.2015
Сообщений: 12
20.10.2015, 14:37  [ТС]
Да, они же ведь работают благодаря подключенной библиотеке Microsoft Excel 12.0 Object Library?
Workbooks.open - открывает книгу
ActiveWorkbook.Close - закрывает книгу
Application.Quit - закрывает само приложение Excel
а процесс не убивается...только вместе с закрытием прожект.ехе

п.с. Ситуацию необходимо как то разрулить, т.к. нужно во время процесса работы прожект.ехе открыть отдельно через сам эксель самостоятельно другие файлы, чтобы оттуда брать данные и вставлять в прожект.ехе при запросах ввода. ( а этот процесс не позволяет запускать эксель, файлы просто напросто зависают при открытии)
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
20.10.2015, 15:05
Robocoper, Да, проверил - действительно работает. Дело в том, что при таком подходе неявно создается объект Excel.Application, который "живет" до конца жизни проекта. А если объявить и создать его явно, появляется возможность "убить" этот объект когда Вам нужно:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Dim xlApp As New Excel.Application
  With xlApp
    .Workbooks.Open FileName:="С:\файл1.xls"
 
'обрабатываем файлик
 
    .ActiveWorkbook.SaveAs FileName:="С:\файл1.xls"
    .ActiveWorkbook.Close SaveChanges:=False
    .Quit
  End With
  Set xlApp = Nothing 'вот тут процесс Excel.exe исчезнет
Добавлено через 4 минуты
Или без переменной
Visual Basic
1
2
3
4
5
6
7
8
9
  With New Excel.Application
    .Workbooks.Open FileName:="С:\файл1.xls"
 
'обрабатываем файлик
 
    .ActiveWorkbook.SaveAs FileName:="С:\файл1.xls"
    .ActiveWorkbook.Close SaveChanges:=False
    .Quit
  End With 'вот тут процесс Excel.exe исчезнет
1
54 / 0 / 0
Регистрация: 18.02.2015
Сообщений: 12
20.10.2015, 15:59  [ТС]
Попробовал первый способ через объявление переменнной, по-прежнему процесс не убивает, всё так же работает как и было, за исключением следующего:



вылетает при повторном вызове процедуры(повторном нажатии на кнопку запуска процедуры).

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

строка кода на которую ругается:
Visual Basic
1
vPROC = xlApp.ActiveWorkbook.ActiveSheet.Range(Cells(1, 1), Cells(2000, 3)).Value
т.е. до попыток "убить" процесс все работает как надо и все понимает..
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
20.10.2015, 18:15
Лучший ответ Сообщение было отмечено Robocoper как решение

Решение

Robocoper, здесь опять "бесхозные" объекты - Cells, для которых VB, видимо, устанавливает свою связь с родительским объектом, а для этого хранит неявную ссылку на него. Попробуйте так
Visual Basic
1
vPROC = xlApp.ActiveWorkbook.ActiveSheet.Range("A1:C2000").Value
или явно указывайте их принадлежность:
Visual Basic
1
2
3
With xlApp.ActiveWorkbook.ActiveSheet
  vPROC = .Range(.Cells(1, 1), .Cells(2000, 3)).Value
End With
Вообще, отключите-ка библиотеку Microsoft Excel 12.0 Object Library и используйте позднее связывание:
Visual Basic
1
2
Dim xlApp As Object
Set xlApp = CreateObject("excel.application")
И включите Option Explicit, это позволит выявить все такие проблемы на этапе компиляции.
Объекты позднего связывания до сих пор закрывались без проблем.
2
54 / 0 / 0
Регистрация: 18.02.2015
Сообщений: 12
21.10.2015, 10:01  [ТС]
Казанский, помогло! спасибо огромное!

А вот еще такой вопрос, если на компьютере не установлен офис вообще, программа сможет работать с файлами .xls формата?(с подключенной библиотекой Microsoft Excel 12.0 Object Library или через объявление
Visual Basic
1
2
Dim xlApp As Object
Set xlApp = CreateObject("excel.application")
)
Вопрос возможно глупый но все же спасибо за ответ..
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
21.10.2015, 10:16
Цитата Сообщение от Robocoper Посмотреть сообщение
если на компьютере не установлен офис вообще, программа сможет работать с файлами .xls формата?
Нет.
И если Вы подключаете библиотеку Microsoft Excel 12.0 Object Library, программа будет искать библиотеку именно этой версии. Если на компе будет установлен Офис другой версии (особенно более ранней), программа может не заработать. В этом смысле позднее связывание (Set xlApp = CreateObject("excel.application")) более универсально, программа заработает хоть с Офис97 - если, конечно, не пытаться открывать файлы xlsx и не использовать свойства и методы, которые появились в более поздних версиях Excel.
1
54 / 0 / 0
Регистрация: 18.02.2015
Сообщений: 12
21.10.2015, 14:26  [ТС]
Казанский, спасибо! Будем работать дальше

Добавлено через 1 час 52 минуты
Возникла вот такая ошибка...
В этом случае максимальное кол-во используемых строк в файле определяется адекватно, 55 штук к примеру
Visual Basic
1
2
3
4
5
6
7
With xlApp
    .Workbooks.Open FileName:="C:\file1.xls"
    .ActiveWorkbook.Sheets("List").Select
    With .ActiveWorkbook.ActiveSheet
        LRPROC = xlApp.ActiveWorkbook.ActiveSheet.UsedRange.Row - 1 + xlApp.ActiveWorkbook.ActiveSheet.UsedRange.Rows.Count
    End With
End With
а в этом определяет = 1

Visual Basic
1
2
3
4
5
6
7
With xlApp
    .Workbooks.Open FileName:="C:\file1.xls"
    .ActiveWorkbook.Sheets("List").Select
    With .ActiveWorkbook.ActiveSheet
        LRPROC = .UsedRange.Row - 1 + .UsedRange.Rows.Count
    End With
End With
Добавлено через 38 минут
п.с. в процессе работы получается так, что во втором случае программа видит пустой лист, хотя на самом деле данные в нем есть, почему так происходит не понятно...
даже если проверить через msgbox
Visual Basic
1
2
3
With xlApp.ActiveWorkbook.ActiveSheet
MsgBox (xlApp.ActiveWorkbook.ActiveSheet.Cells(15, 2))' - так выдает содержимое ячейки
end with
Visual Basic
1
2
3
With xlApp.ActiveWorkbook.ActiveSheet
MsgBox (.Cells(15, 2))' - а вот так оно пустое
end with
Добавлено через 28 минут
на первом(начальном листе) заполнена только первая строка, а на втором( на который происходит переключение) 55 строк, на деле выходит что программа не хочет переключаться на другой лист, поэтому и выдает значение = 1
непонятно как то.
Visual Basic
1
2
3
With xlApp.ActiveWorkbook.ActiveSheet
MsgBox (xlApp.ActiveWorkbook.ActiveSheet.Cells(15, 2))' - так выдает содержимое ячейки
end with
таким способом она выдает значение с нужного листа, т.е. переключилась
Visual Basic
1
2
3
With xlApp.ActiveWorkbook.ActiveSheet
MsgBox (.Cells(15, 2))' - а вот так оно пустое
end with
а так нет, тянет с первого листа, как такое может быть?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.10.2015, 14:26
Помогаю со студенческими работами здесь

Не закрывает процесс Excel.exe
Нужна помощь! После копирования строк и столбцов из одного файла Excel в другой файл Excel не закрывается процесс Excel.exe. ...

не закрывается процесс excel.exe
добрый день столкнулся с проблемой в представленном ниже коде: не понятно по каким причинам не отрабатывается OpExcel.Quit. После...

Остаточный процесс EXCEL.EXE
Здравствуйте товарищи профессионалы! =) Тем подобных нашел уйму, перепробовал все, чтобы не плодить еще одну тему, не помогает. ...

Не могу закрыть процесс excel.exe (не стандартная ситуация)
Добрый день! Понимаю, что тема выглядит избитой, но я уже двое суток не могу решить проблему с подвисшим процессом excel. Открываю: ...

Почему процесс EXCEL.EXE висит даже после уничтожения его переменных
Приветствую. Гружу данные с Excel'я и забавная штука получается. Выполняю код: Dim Exc As Object Exc =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru