1

Тема: Сохранение документа

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

2

Re: Сохранение документа

Dryun пишет:

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

Для начала вам нужно обеспечить срабатывание VBA-обработчика события сохранения документа. Это можно сделать в следующей последовательности:
1. Создать модуль класса ThisApplication в проекте Normal. В этом модуле объявить публичную переменную oApp

Public WithEvents oApp As Word.Application


2. В этом же модуле класса создайте подпрограмму с именем oApp_DocumentBeforeSave и обработкой вашего события

Private Sub oApp_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
   '...
End Sub

3. В модуле NewMacros объявите на уровне модуля создание экземпляра объекта oAppClass (типа ThisApplication) и в подпрограмме AutoExec свяжите его с объектом Application:

Dim oAppClass As New ThisApplication

Public Sub AutoExec()

   Set oAppClass.oApp = Word.Application

End Sub

Тогда при старте Word будет создаваться обработчик событий для документов, перехватываемых из событий для приложения Word (это объект Application).
В частности, код для обработки события сохранения файла может быть таким, как изложено ниже.
В примере предполагается, что отслеживаемые файлы должны содержать свойство DocTracked со значением Yes (вы можете это прописать в свойствах шаблона, на основе которого будут создаваться отслеживаемые документы) . Также предполагается, что отслеживаемые файлы должны сохраняться только в "разрешенную" папку C:\Temp. Неотслеживаемые документы будут сохраняться на свое место.
Если сохраняемый файл является отслеживаемым, то для него отменяется сохранение по "родному" месту (оператором Cancel = True), а затем проверяется, есть ли такой документ в разрешенной папке. Если есть, то запрашивается перезапись этого документа.
Разумеется, ваши требования могут отличаться от требований, предполагаемых в этом посте. Если так, то VBA-код надо соответственно изменить.
Ниже пример кода подпрограммы обработки события сохранения файла:

Private Sub oApp_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
Dim newpath As String
Dim docprop As String
Dim msg_style
Dim rewrite As Boolean
Dim msg_response As String
Dim msg_func_title As String
Const docmonprop As String = "DocTracked"
Const rule_folder As String = "C:\Temp"
docprop = "?"
On Error Resume Next
docprop = ActiveDocument.CustomDocumentProperties(docmonprop).Value
On Error GoTo 0
If LCase(docprop) = "yes" Then 'this is a trcked documenta
    Cancel = True
    newpath = rule_folder & "\" & Doc.name 'where to save the tracked doc
    
    'If the file exists, we first delete the old file
    If FileExists(newpath) Then
        msg_func_title = "Rewritig the tracked file"
        msg_text = "File " & vbCrLf & newpath & vbCrLf & "exists. Do you want to re-write it?"
        msg_style = vbYesNo + vbQuestion + vbDefaultButton2  ' Define buttons+icon
        msg_response = MsgBox(msg_text, msg_style, msg_func_title)
        If msg_response = vbYes Then    ' User chose Yes.
            rewrite = True
        Else                            ' User chose No.
            rewrite = False
        End If
    Else
        rewrite = True
    End If
    If rewrite Then
        Doc.SaveAs newpath
    End If
End If
End Sub

3

Re: Сохранение документа

Забыл добавить код подпрограммы FileExists.
Он может быть таким:

Private Function FileExists(docpath As String) as Boolean
Dim TestStr As String

'Determine if File exists
On Error Resume Next
    TestStr = Dir(docpath)
On Error GoTo 0
If TestStr = "" Then
    FileExists = False
Else
    FileExists = True
End If

End Function

4

Re: Сохранение документа

Благодарствуйте )))
Буду разбираться