Тема: Робота події WithEvents App As Word.Application в VBA

Добридень, форумчани.
Допоможіть розібратися в ситуації. При закритті документа в Ворді-2007, працює процедура AutoClose, яка виконує ряд дій. Одна з цих дій - виклик події WithEvents App As Word.Application з клас-модуля, в якому я встановлюю блокування на закриття поточного документу:

Public WithEvents App As Word.Application

    Private Sub App_DocumentBeforeClose (ByVal Doc As Document, Cancel As Boolean)
        'Cancel = True' скасування закриття документа
        'Cancel = False' дозвіл закриття документа
       
        If Doc.Name = "Назва документа" Then
            Cancel = True 'заборона закриття документа
            MsgBox "Документ заблокований для закриття"
        End If
    End Sub

Але суть у тому, що процедура AutoClose, відпрацювавши, як раз таки закриває документ і щоб ця подія для даного документа спрацювала, необхідно знову відкрити цей же документ. Відкрити тільки-но закритий документ потрібно відразу ж поки користувач не почав інші дії і зробити це автоматично.
Можливо якось запрограмувати негайний виклик процедури відкриття цього документа після завершення роботи процедури AutoClose? Або тут потрібно шукати інше рішення?

Якщо вдасться вирішити це питання далі вже буду думати як запустити зворотний процес розблокування файлу.

2

Re: Робота події WithEvents App As Word.Application в VBA

Для чого взагалі існує заборона на закриття документа? Це дивно виглядає.

Але суть у тому, що процедура AutoClose, відпрацювавши, як раз таки закриває документ і щоб ця подія для даного документа спрацювала, необхідно знову відкрити цей же документ

В смислі процедура AutoClose (чи App_DocumentBeforeClose) спрацьовує ще й при відкритті документа?

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»

3

Re: Робота події WithEvents App As Word.Application в VBA

Можливо якось запрограмувати негайний виклик процедури відкриття цього документа після завершення роботи процедури AutoClose? Або тут потрібно шукати інше рішення?

Як щодо виклику документу в разі його закриття за допомогою ShellExecute? Обгортка вінапі хвункції для вашого бейсика:


Private Declare Function ShellExecute Lib "shell32" _
    Alias "ShellExecuteA" (ByVal hwnd As Long, _
    ByVal lpOperation As String, ByVal lpFile As String, _
    ByVal lpParameters As String, ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long
     
    Private Const SW_SHOWNORMAL = 1
     
    Private Sub Form_Load()
      ShellExecute 0, vbNullString, _
      "mailto:callcenter@ssu.gov.ua", vbNullString, _
      vbNullString, SW_SHOWNORMAL
    End Sub
Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»
Подякували: Mister_Kovalski1

4

Re: Робота події WithEvents App As Word.Application в VBA

0xDADA11C7 написав:

Для чого взагалі існує заборона на закриття документа? Це дивно виглядає.

Макро-віруси відроджуються.

[x|x<-[2..],all(>0)[x`mod`y|y<-[2..x-1]]]

5 Востаннє редагувалося Mister_Kovalski (07.10.2017 20:09:19)

Re: Робота події WithEvents App As Word.Application в VBA

0xDADA11C7 написав:

В смислі процедура AutoClose (чи App_DocumentBeforeClose) спрацьовує ще й при відкритті документа?

Процедура AutoClose спрацьовує тільки при закритті документу.

6

Re: Робота події WithEvents App As Word.Application в VBA

0xDADA11C7, дякую за наводку і приклад. Почитаю про ShellExecute.