"Зависает" Excel

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

"Зависает" Excel

Сообщение Jakov » 29.08.2003 (Пт) 17:21

Помогите pls разобраться со следующей проблемой. Есть программа на VB, запускающая Excel и записывающая в xls файл результаты расчетов. После окончания очередного расчета можно ввести новые исходные данные и опять запустить расчетчик. Так вот, если после очередного расчета пользователь закроет Excel (не закрывая при этом саму программу) и начнет считать заново, то когда программа пытается запустить Excel он "зависает", т.е. окно Excel выводится, но на нем только виден только заголовок, а все остальное - от предыдущего окна. И закрыть это окно можно только при помощи волшебной комбинации CAD (завершить задачу). Если между расчетами пользователь не закрывает Excel, то все работает нормально. Где собака порылась?

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

Сообщение GSerg » 29.08.2003 (Пт) 17:27

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

Jakov
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 29.08.2003 (Пт) 16:53
Откуда: Москва

Сообщение Jakov » 29.08.2003 (Пт) 17:41

Указатели обнуляю. Скрывать Excel не могу, потому что хочу дать пользователю посмотреть на результаты расчетов :D Насчет удаления крестика думал, но по-моему это немножко кривовато. Еще я заметил, что когда закрываешь Excel, он все равно болтается в списке запущенных задач (через CAD), хотя ни в трее ни на экране его уже нет. Такое ощущение, что программа на VB не дает ему правильно закрыться

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

Сообщение GSerg » 29.08.2003 (Пт) 17:45

Нифига :)
Работал с экселем из VB, всё прекрасно. Даже если не обнулять указатели, эксель можно окончально закрыть из него же.
Глюк-с :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Jakov
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 29.08.2003 (Пт) 16:53
Откуда: Москва

Сообщение Jakov » 29.08.2003 (Пт) 17:58

Еще бы понять это глюк Excel, VB или моих ручек? :oops:
Самое интересное, что если сначала выйти из программы, потом из Excel выходишь на ура

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 01.09.2003 (Пн) 8:14

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

Что можно посоветовать? Прицепиться к событиям Excel (например, на закрытие документов) и использовать/отслеживать их. Нужно не выходить из Excel, а скрывать его видимость, если есть желание работать с ним в дальнейшем. Т.е. в этом событии возвращаешь параметр Cancel равным True и скрываешь Excel.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Георгий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 126
Зарегистрирован: 08.08.2003 (Пт) 15:08
Откуда: Россия

Сообщение Георгий » 01.09.2003 (Пн) 9:48

Я решал эту проблему использую свойства Visible у одного из обектов (вроде ActiveWorkBook.Window.Visible) - все работает, НО :!: так делать не надо :shock: это не верно :)

З.Ы. Кода рядом нет, так что в объекте мог ошибиться.
Origin - это что?

Jakov
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 29.08.2003 (Пт) 16:53
Откуда: Москва

Сообщение Jakov » 01.09.2003 (Пн) 10:32

В том-то и дело, что закрывает Excel между сеансами расчетов пользователь, и я естественно никак не могу на это влиять. Вот идея прицепиться к событиям Excel интересная, только я не соображу как это сделать из VB? :oops:

Георгий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 126
Зарегистрирован: 08.08.2003 (Пт) 15:08
Откуда: Россия

Сообщение Георгий » 01.09.2003 (Пн) 12:06

Dim WithEvents ExlApp as Excel.Application
Origin - это что?

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 01.09.2003 (Пн) 13:11

Вот примерный код
Код: Выделить всё
Option Explicit

Dim WithEvents ExcelApp As Excel.Application
Const workbookname As String = "c:\tmp\x.xls"

Private Sub ExcelApp_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, Cancel As Boolean)
  Dim wb2 As Excel.Workbook
  If ExcelApp.Visible Then
    If UCase(Wb.FullName) = UCase(workbookname) Then
      Cancel = True
      ExcelApp.Visible = False
     
      '  Закрываем все остальные документы
      For Each wb2 In ExcelApp.Workbooks
        If Not wb2 Is Wb Then wb2.Close
      Next

    End If
  End If
End Sub

Private Sub Form_Click()
  ExcelApp.Visible = True
End Sub

Private Sub Form_Load()
  Set ExcelApp = CreateObject("Excel.application")
  ExcelApp.Workbooks.Open workbookname
End Sub

Private Sub Form_Unload(Cancel As Integer)
  Dim ea2 As Excel.Application, wb2 As Excel.Workbook
 
  Set ea2 = ExcelApp
  Set ExcelApp = Nothing
 
  If ea2.Workbooks.Count = 1 Then
    '  Закрываем приложение
    ea2.Visible = False
    ea2.Quit
  Else
    '  Закрываем только свой документ
    For Each wb2 In ea2.Workbooks
      If UCase(wb2.FullName) = UCase(workbookname) Then
        wb2.Close
        Exit For
      End If
    Next
  End If
End Sub
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Jakov
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 29.08.2003 (Пт) 16:53
Откуда: Москва

УРА!!!

Сообщение Jakov » 01.09.2003 (Пн) 17:22

Все заработало. Огромное всем спасибо, в особенности Vi за провленное участие и советы


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

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

Сейчас этот форум просматривают: Google-бот, SemrushBot, Yandex-бот и гости: 11

    TopList  
cron