Тема: Сохранение документа
Подскажите плиз, как сохранять автоматически в назначенную папку файл на основе одного выбранного шаблона, чтобы при работе в других файлах такого сохранения не происходило.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Подскажите плиз, как сохранять автоматически в назначенную папку файл на основе одного выбранного шаблона, чтобы при работе в других файлах такого сохранения не происходило.
Подскажите плиз, как сохранять автоматически в назначенную папку файл на основе одного выбранного шаблона, чтобы при работе в других файлах такого сохранения не происходило.
Для начала вам нужно обеспечить срабатывание 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
Забыл добавить код подпрограммы 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
Благодарствуйте )))
Буду разбираться
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться