Re: VBA

Здравствуйте!
Как заставить отчет выполнить процедуру:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Спасибо.

Re: VBA

Это обработчик на закрытие WorkBook
а отчет WorkBook как он может выполнится?

Re: VBA

Андрей Беньков писал(а):
Это обработчик на закрытие WorkBook
а отчет WorkBook как он может выполнится?


Я в курсе, что процедура работает на закрытие книги.
Но мне нужно выполнить при закрытии отчета, следующее:
  With ActiveSheet
       If not TypeName(.Cells(1, 1).Comment) Like "Comment" Then
             Save
             Exit Sub
       End If
  End With
    If MsgBox("Вы хотите закрыть рабочую книгу " & Me.Path & "\" & Me.Name & "?", vbYesNo) = vbYes Then
      On Error Resume Next
      SaveAs Me.Path & "\" & Me.Name
      If InStr(1, Me.Name, "_") > 0 Then
         Exit Sub
      End If
      If MsgBox("Вы хотите сохранить рабочую книгу " & Me.Path & "\" & Me.Name & " в ТCS?", vbYesNo) = vbYes Then
           If TCS Is Nothing Then
             Set TCS = CreateObject("CSDN.TCS")
           End If
           Set TCSApp = TCS.LoginCurrent
           If Err.Number <> 0 Then
             If (Err.Number = -2147418113) Or (Mid(Err.Description, "cоединение")) Then
                On Error Resume Next
                Set TCSApp = TCS.Login
                If Err.Number <> 0 Then
                   MsgBox ("Ошибка при соединении с TCS!")
                   Exit Sub
                End If
             End If
           End If
            Set Archive = TCSApp.Archive
           If Archive.RunModuleForSelect("Выберите документ", False) > 0 Then
              If Not Archive.AllowInsert Then   
                  MsgBox("У Вас нет доступа к документу!")
              Exit Sub
              End If
              Set Files = Archive.Properties("FILES").AsIDispatch
              If Not Files.Locate("NAME", Me.Name, 0) Then
                 Call Files.AddFile(Me.Path & "\" & Me.Name, -1)
              Else
                 If MsgBox("Файл существует, заменить " & Me.Name & "?" + Chr$(13) + Chr$(10) _
                 + "Если нет, то создать новую версию документа.", vbYesNo) = vbYes Then
                    'Call Files.DeleteRecord(False)
                    Call Files.AddFileEx(Me.Path & "\" & Me.Name, 1, -1)
                 Else
                 Set VERSIONS = Archive.Properties("VERSIONS").AsIDispatch
                 If Not VERSIONS Is Nothing Then
                     'VER_ACT
                     Call Archive.CreateDocVer(2 + 8 + 16 + 32 + 128 + 256 + 4096, VERSIONS.Properties("VER_NAME").AsString & "(API" & CStr(VERSIONS.Properties("VER_NUMBER").AsInteger + 1) & ")" _
                    , VERSIONS.Properties("VER_ID").DisplayText, "")
                    Set Files = Archive.Properties("FILES").AsIDispatch
                    Call Files.AddFileEx(Me.Path & "\" & Me.Name, 1, -1)
                 End If
                  Set VERSIONS = Nothing
                 End If
              End If
              With ActiveSheet
                If TypeName(.Cells(1, 1).Comment) Like "Comment" Then
                      .Cells(1, 1).Comment.Delete
                      Save
                 End If
              End With
              Set Files = Nothing
              Set Archive = Nothing
           End If
        End If
       Application.Quit
    Else
       Cancel = True
    End If

Re: VBA

Идея очень интересна  :idea:
Теоретически всю эту текстовку надо отдельной процедурой засунуть в лист книги сформированной отчётом. Есть объект Application.VBE может его поковыряете? или кто из форумчан подскажет конкретнее чего ещё посмотреть. Код процедуры через Implement наверное надо выполнять.

Re: VBA

Ввел
Attribute VB_Name = "CloseSaveArhiv"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True

и


Sub Implement()
    Application.MacroOptions Macro:="CloseSaveArhiv", Description:="", _
        ShortcutKey:="c"
End Sub
Создается модул CloseSaveArhiv а в ней процедура Private Sub Workbook_BeforeClose(Cancel As Boolean), a должен в ЭтаКнига. ??????????????

Что не так??????????

Re: VBA

Создается модул CloseSaveArhiv а в ней процедура Private Sub Workbook_BeforeClose(Cancel As Boolean), a должен в ЭтаКнига. ??????????????

ага, надо прямо в книге

Re: VBA

Как?