Excel в диспечере задач

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
BIT
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 25.07.2003 (Пт) 16:45

Excel в диспечере задач

Сообщение BIT » 24.02.2006 (Пт) 16:28

Открыл EXCEL : Application.Workbooks.Open FileName:=FullPathDataBase, ReadOnly:=True, взял данные, закрыл EXCEL : Application.Quit. При этом в диспечере задач EXCEL.EXE остаётся, при завершении программы процесс EXCEL.EXE выгружается (показания в диспечере)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.02.2006 (Пт) 16:37

Опять этот вопрос... :roll:

Код покажи хоть.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

BIT
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 25.07.2003 (Пт) 16:45

Сообщение BIT » 24.02.2006 (Пт) 16:54

GSerg

Код: Выделить всё

Option Explicit
Sub main()
Dim FullPathDataBase As String
  FullPathDataBase = "c:\1\Book1.xls"
  application.Workbooks.Open FileName:=FullPathDataBase, ReadOnly:=True
  Stop
  ' в диспечере появился процесс EXCEL.EXE
  application.Quit
  Stop
  ' в диспечере остаётся процесс EXCEL.EXE
End Sub
' выгрузился EXCEL.EXE

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.02.2006 (Пт) 17:03

Создание excel не вижу.
Закрытие книги с/без сохранения не вижу.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

BIT
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 25.07.2003 (Пт) 16:45

Сообщение BIT » 24.02.2006 (Пт) 17:32

GSerg

в Reference подключил Microsoft Excel 10.0 Object Library
application.Quit - не закрытие приложения ?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.02.2006 (Пт) 17:57

BIT писал(а):в Reference подключил Microsoft Excel 10.0 Object Library

Как это помогает/мешает создавать объект excel через = new excel.application?

BIT писал(а):application.Quit - не закрытие приложения ?

application.Quit - вопрос "А можно вас закрыть?", где "А нельзя!" является допустимым ответом.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

BIT
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 25.07.2003 (Пт) 16:45

Сообщение BIT » 26.02.2006 (Вс) 11:52

GSerg
Задача открыть и сразу закрыть приложение EXCEL c загруженными данными (FullPathDataBase), зачем создавать объект? (пример 4 поста выше)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.02.2006 (Вс) 12:00

Вопрос шикарен и принадлежит категории "Как прочитать файл, не открывая его".

Код: Выделить всё
with new excel.application
  with .workbooks.open(filename)
    msgbox .worksheets(1).cells(1,1).value
    .close false
  end with
  .quit
end with
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

BIT
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 25.07.2003 (Пт) 16:45

Сообщение BIT » 26.02.2006 (Вс) 14:36

GSerg
последний пример помог разобраться с вопросом. тема закрыта

СПАСИБО.

BIT
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 25.07.2003 (Пт) 16:45

Сообщение BIT » 27.02.2006 (Пн) 15:13

Слишком рано я решил, что вопрос исчерпан. Не могу решить вопрос: как правильно выйти из модуля при возникновении ошибки (в коде помечено)
Код: Выделить всё

Sub MAIN()
Dim FlagErr As Boolean
  'код
  ReadData "c:\1\Book1.xls", FlagErr
  If FlagErr Then
    'код
  End If
  'код
End Sub

Sub ReadData(FullPathDataBase As String, FlagErr As Boolean)
On Error GoTo M_Err
  Dim Itime1 As Integer
  Dim Btime1 As Boolean
  FlagErr = True
  With New Excel.Application
    With .Workbooks.Open(FileName:=FullPathDataBase, ReadOnly:=True)
      For Itime1 = 1 To .Worksheets.Count
        With .Worksheets(Itime1)
          'код
        End With
        'код
        If Btime1 Then
          ' некая ошибка в данных хочу выйти из ReadData
          'код
          .Close False
          ' что делать с Excel.Application
          Exit Sub
        End If
      Next
      .Close False
    End With
    .Quit
  End With
  FlagErr = False
Exit Sub
M_Err:
MsgBox "Ошибка - " & Error, vbOKOnly
' что делать с Excel.Application
End Sub



GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.02.2006 (Пн) 15:20

Код: Выделить всё
Sub ReadData(FullPathDataBase As String, FlagErr As Boolean)
On Error GoTo M_Err
  Dim Itime1 As Integer, Btime1 As Boolean, xl as excel.application

  FlagErr = True
  set xl=new excel.application
  With xl
    With .Workbooks.Open(FileName:=FullPathDataBase, ReadOnly:=True)
      For Itime1 = 1 To .Worksheets.Count
        With .Worksheets(Itime1)
          'код
        End With
        'код
        If Btime1 Then
          ' некая ошибка в данных хочу выйти из ReadData
          'код
          .Close False
          ' что делать с Excel.Application
          Exit Sub
        End If
      Next
      .Close False
    End With
    .Quit
  End With
  FlagErr = False
Exit Sub

M_Err:
MsgBox "Ошибка - " & Error, vbOKOnly
  if xl.workbooks.count then xl.workbooks(1).close false
  xl.quit
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

BIT
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 25.07.2003 (Пт) 16:45

Сообщение BIT » 28.02.2006 (Вт) 16:58

А как правильно передать объект в процедуру и при возникновении ошибки в процедуре её (ошибку) обработать

Код: Выделить всё


Private Sub ReadData()
On Error GoTo M_Err
  Dim xl As Excel.Application
  Dim xlList As Object ' правильно ли ?
  Set xl = New Excel.Application
  With xl
    .DisplayAlerts = False
    Set xlList = .Workbooks.Add.Worksheets(1)
    With xlList
      .Cells(1, 1).Value = 1
      ' и т.д.
    End With
    DopSub xlList ' правильно ли (передача в процедуру) ?
    ' и т.д.
    .Workbooks(1).Close True, "c:\2\1.xls"
    .Quit
  End With
Exit Sub
M_Err:
MsgBox "Ошибка - " & Error, vbOKOnly
  If xl.Workbooks.Count Then xl.Workbooks(1).Close False
  xl.Quit
End Sub
Private Sub DopSub(list)
  Cells(2, 2) = 2
  ' и т.д.
  '  возникла в процедуре ошибка как обработать ?
End Sub

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.02.2006 (Вт) 17:58

А как ты вообще обрабатываешь ошибки?
Потому что разницы как бы нет.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

BIT
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 25.07.2003 (Пт) 16:45

Сообщение BIT » 28.02.2006 (Вт) 18:43

GSerg

обработчик в ReadData:
Код: Выделить всё
M_Err:
MsgBox "Ошибка - " & Error, vbOKOnly
  If xl.Workbooks.Count Then xl.Workbooks(1).Close False
  xl.Quit


Для примера в процедуру ReadData вставим строчку i=1/0. Результат ошибка MSG - Division by zero ; Close ; Quit ; Exit. Всё так как надо.
Теперь подставим i=1/0 в процедуру DopSub. Ошибка переход в обработчик ReadData MSG - Division by zero ; Close ; Quit ; Exit. Вроде тоже всё устраивает. Но во втором примере при выходе из процедуры ReadData в диспечере задач остаётся приложение EXCEL

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 01.03.2006 (Ср) 3:59

Не обрабатывай ошибку в DopSub. Она перейдёт в ReadData тогда.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

BIT
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 25.07.2003 (Пт) 16:45

Сообщение BIT » 01.03.2006 (Ср) 11:30

GSerg я и не обрабатываю ошибку в DopSub и она переходит в
ReadData и выдаёт сообщение и выполняет Close и Quit (то, что мне и надо), НО ПРИ ВЫХОДЕ ИЗ ReadData В ДИСПЕЧЕРЕ ЗАДАЧ ВИСИТ EXCEL ( НЕ ДОЛЖНО ЕГО БЫТЬ ТАМ)

BIT
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 25.07.2003 (Пт) 16:45

Сообщение BIT » 02.03.2006 (Чт) 14:29

Выяснил следующее если в процедуре DopSub не использовать Range то всё работает как надо (при возникновении ошибки), в противном случае при выходе из ReadData ВИСИТ EXCEL В ДИСПЕЧЕРЕ

Код: Выделить всё

Private Sub Dop(list)
Dim itime1 As Integer
  list.Cells(2, 2).Value = 2
  ' itime1 = 1 / 0 - правильно выйдет из ReadData
  list.Cells(2, 2).Font.Size = 30
  ' itime1 = 1 / 0 - правильно выйдет из ReadData
  list.Range(Cells(3, 3), Cells(3, 3)).Value = 3
  ' itime1 = 1 / 0 - при выходе из ReadData приложение в диспечере
End Sub



ПОЧЕМУ?


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 85

    TopList