Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как проверить, подключен ли объект?

1.6K
22 декабря 2004 года
GDragon
67 / / 11.10.2002
Всем привет.
Проблема такая, я в Access пишу процедурку, которая будет создавать вордовый документ и грузить туда в шаблон данные. Объект Word у меня создается autoexec-ом при запуске базы:

Function AutorunFunction()
Set WordObject = CreateObject("word.Application")
WordObject.Visible = True
End Function

А потом по нажатии кнопочки на аксесовской форме, в Word-е будет создаваться отчет. НО проблема в том, что какой-нибудь глупый юзер может с перепугу закрыть Word.
Объясните плз., как мне проверить WordObject на предмет: подключен к нему все еще объект, или уже нет? Подозреваю, что это не сложно, но если сложно, то напишите подробнее (я в Бейсике дуб) :(
648
24 декабря 2004 года
Tiraspolsky
220 / / 23.07.2003
А зачем ты торопищься?

WordObject.Visible = True

можно установить, когда отчет будет сформирован.
258
24 декабря 2004 года
SergeySV
1.5K / / 19.03.2003
В общем Tiraspolsky безусловно прав - можно показать word пользователю когда все будет уже готово... правда это конечно не предохраняет на 100% программу от закрытия (можно ее и через диспетчер задач прикрыть), так что лишняя проверка не помешает.

например так
Код:
Public Function CheckExcel() As Boolean
  Dim objExcl As Object
 
  On Error Resume Next
   
    Err.Clear
    Set objExcl = GetObject(, "Excel.Application")
    If Err.Number > 0 Then
      CheckExcel = False
    Else
      CheckExcel = True
    End If
     
End Function
1.6K
24 декабря 2004 года
GDragon
67 / / 11.10.2002
Цитата:
Originally posted by Tiraspolsky
А зачем ты торопищься?

WordObject.Visible = True

можно установить, когда отчет будет сформирован.


Это на самом деле не принципиально. Если WordObject создается один раз за все время работы БД, то все равно существует опасность, что его закроют ручками раньше, чем к нему потом обратится программа.

1.6K
24 декабря 2004 года
GDragon
67 / / 11.10.2002
Цитата:
Originally posted by SergeySV
В общем Tiraspolsky безусловно прав - можно показать word пользователю когда все будет уже готово... правда это конечно не предохраняет на 100% программу от закрытия (можно ее и через диспетчер задач прикрыть), так что лишняя проверка не помешает.

например так


Спасибо, попробую :)

258
24 декабря 2004 года
SergeySV
1.5K / / 19.03.2003
Есть токо один момент который не учитывается в моей функции:
Если у пользователя свой Excel, а вы открываете свой и пользователь Ваш закрывает, а свой оставляет, то тогда это не отсечется, а ошибке в коде возникнет... потому что функция проверяет просто наличие запущенного экземпляра Excel'я

Чтобы это учесть можно ее переписать на такой манер:
Код:
Function CheckExcl(ByRef ExcelApp As Object) As Boolean
  Dim xlApp As Object
   
  On Error GoTo Er_
 
  ' пробуем обратиться к свойству Application у Excel.Application.
  ' это свойство есть у каждого объекта в VBA
  Set xlApp = ExcelApp.Application
  CheckExcl = True
   
Ex_:
  Set xlApp = Nothing
  Exit Function
 
Er_:
  Set ExcelApp = Nothing
  CheckExcl = False
  Resume Ex_
 
End Function


ExcelApp - это переменная-указатель на твой созданный экземпляр-Excel
648
28 декабря 2004 года
Tiraspolsky
220 / / 23.07.2003
Ребята, вы, конечно, большие умельцы по части всяких хитростей и ухищрений. Давайте, однако, поймем, о чем мы говорим. А говорим мы об интерфейсе пользователя. И если WordObject.Visible = False, то объект из интерфейса пользователя исключен. Если же считать, что диспетчер программ также входит в интерфейс пользователя, то пользователь (который полный болван по определению) может закрыть не только Word, но и все приложение а также другие жизненно важные процессы. С этой точки зрения надо на время формирования отчета заблокировать клаву и мышь. Такое решение, однако, напоминает пословицу про дурака в церкви.
Я призываю Вас соразмерять прилагаемые усилия и средства с решаемой задачей. Тем более в данном конкретном случае, когда программа общается с объектом только во время формирования отчета.
Если же есть надобность в последующих обращениях, на мой взгляд лучший способ - проверять дескриптор окна, который следует предварительно запомнить.
1.6K
28 декабря 2004 года
GDragon
67 / / 11.10.2002
Цитата:
Originally posted by Tiraspolsky
Ребята, вы, конечно, большие умельцы по части всяких хитростей и ухищрений. Давайте, однако, поймем, о чем мы говорим. А говорим мы об интерфейсе пользователя. И если WordObject.Visible = False, то объект из интерфейса пользователя исключен. Если же считать, что диспетчер программ также входит в интерфейс пользователя, то пользователь (который полный болван по определению) может закрыть не только Word, но и все приложение а также другие жизненно важные процессы. С этой точки зрения надо на время формирования отчета заблокировать клаву и мышь. Такое решение, однако, напоминает пословицу про дурака в церкви.
Я призываю Вас соразмерять прилагаемые усилия и средства с решаемой задачей. Тем более в данном конкретном случае, когда программа общается с объектом только во время формирования отчета.
Если же есть надобность в последующих обращениях, на мой взгляд лучший способ - проверять дескриптор окна, который следует предварительно запомнить.


Да все Ок, я уже прогу написал :) Теперь вношу поправки. Проще заново переписать... :(

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог