Помогите создать Макрос для MS Word. Задача такова. Человек открывает документ или шаблон документа, который находиться в на определённом компьютере, вносит свои изменения и при нажатие кнопки сохранить или закрытие документа, документ сохраняется в определённое место на компьютере в сети. Файл сохраняется с определённым названием и с текущей датой. Перед открытием документа или шаблона, макрос должен проверить, существует ли уже файл с названием и текущей дате на определённым компьютере, если существует, открывает именно его.
Помогите создать Макрос для MS Word. Задача такова. Человек открывает документ или шаблон документа, который находиться в на определённом компьютере, вносит свои изменения и при нажатие кнопки сохранить или закрытие документа, документ сохраняется в определённое место на компьютере в сети. Файл сохраняется с определённым названием и с текущей датой. Перед открытием документа или шаблона, макрос должен проверить, существует ли уже файл с названием и текущей дате на определённым компьютере, если существует, открывает именно его.unkind85
Option Explicit Sub OpenAs() Dim s$, strDate$, strPath$, r As Boolean, S1$ s = ActiveDocument.Name strPath = "d:" strDate = Format(Now, "yyyy-mm-dd") If s Like "*-??-*" Then s = RegExpReplace(s, "\d{2,4}-\d{2}-\d{2,4}", strDate): r = 1 If Not r Then S1 = Split(s, ".")(UBound(Split(s, "."))) s = Trim(Left(s, Len(s) - Len(S1) - 1)) s = s & " " & strDate & "." & S1 End If If Dir(strPath & "\" & s) = "" Then MsgBox "Файл:" & Chr(10) & strPath & "\" & s & " не существует!", vbInformation: Exit Sub
Documents.Open FileName:=strPath & "\" & s MsgBox "файл:" & Chr(10) & strPath & "\" & s & " открыт!", vbInformation End Sub Sub SaveAs() Dim s$, strDate$, strPath$, r As Boolean, S1$ s = ActiveDocument.Name strPath = "d:" strDate = Format(Now, "yyyy-mm-dd") If s Like "*-??-*" Then s = RegExpReplace(s, "\d{2,4}-\d{2}-\d{2,4}", strDate): r = 1 If Not r Then S1 = Split(s, ".")(UBound(Split(s, "."))) s = Trim(Left(s, Len(s) - Len(S1) - 1)) s = s & " " & strDate & "." & S1 End If s = InputBox("Сохранить файл в папке " & vbCr & strPath & vbCr & "как:", , s) If Not s = "" Then ActiveDocument.SaveAs2 FileName:=strPath & "\" & s MsgBox "файл:" & Chr(10) & strPath & "\" & s & " сохранен", vbInformation End If End Sub Private Function RegExpReplace(ByVal WhichString As String, _ ByVal Pattern As String, _ Optional ByVal ReplaceWith As String = " ", _ Optional ByVal IsGlobal As Boolean = True, _ Optional ByVal IsCaseSensitive As Boolean = True) As String 'Функция по регулярному выражению (маске) возвращает результат 'Declaring the object Dim objRegExp As Object 'Initializing an Instance Set objRegExp = CreateObject("vbscript.regexp") 'Setting the Properties objRegExp.Global = IsGlobal objRegExp.Pattern = Pattern objRegExp.IgnoreCase = Not IsCaseSensitive 'Execute the Replace Method RegExpReplace = objRegExp.Replace(WhichString, ReplaceWith) End Function
[/vba]
Вот Замените путь "d:" на нужный.
[vba]
Код
Option Explicit Sub OpenAs() Dim s$, strDate$, strPath$, r As Boolean, S1$ s = ActiveDocument.Name strPath = "d:" strDate = Format(Now, "yyyy-mm-dd") If s Like "*-??-*" Then s = RegExpReplace(s, "\d{2,4}-\d{2}-\d{2,4}", strDate): r = 1 If Not r Then S1 = Split(s, ".")(UBound(Split(s, "."))) s = Trim(Left(s, Len(s) - Len(S1) - 1)) s = s & " " & strDate & "." & S1 End If If Dir(strPath & "\" & s) = "" Then MsgBox "Файл:" & Chr(10) & strPath & "\" & s & " не существует!", vbInformation: Exit Sub
Documents.Open FileName:=strPath & "\" & s MsgBox "файл:" & Chr(10) & strPath & "\" & s & " открыт!", vbInformation End Sub Sub SaveAs() Dim s$, strDate$, strPath$, r As Boolean, S1$ s = ActiveDocument.Name strPath = "d:" strDate = Format(Now, "yyyy-mm-dd") If s Like "*-??-*" Then s = RegExpReplace(s, "\d{2,4}-\d{2}-\d{2,4}", strDate): r = 1 If Not r Then S1 = Split(s, ".")(UBound(Split(s, "."))) s = Trim(Left(s, Len(s) - Len(S1) - 1)) s = s & " " & strDate & "." & S1 End If s = InputBox("Сохранить файл в папке " & vbCr & strPath & vbCr & "как:", , s) If Not s = "" Then ActiveDocument.SaveAs2 FileName:=strPath & "\" & s MsgBox "файл:" & Chr(10) & strPath & "\" & s & " сохранен", vbInformation End If End Sub Private Function RegExpReplace(ByVal WhichString As String, _ ByVal Pattern As String, _ Optional ByVal ReplaceWith As String = " ", _ Optional ByVal IsGlobal As Boolean = True, _ Optional ByVal IsCaseSensitive As Boolean = True) As String 'Функция по регулярному выражению (маске) возвращает результат 'Declaring the object Dim objRegExp As Object 'Initializing an Instance Set objRegExp = CreateObject("vbscript.regexp") 'Setting the Properties objRegExp.Global = IsGlobal objRegExp.Pattern = Pattern objRegExp.IgnoreCase = Not IsCaseSensitive 'Execute the Replace Method RegExpReplace = objRegExp.Replace(WhichString, ReplaceWith) End Function
Вопрос ещё такой: 1. Можно ли эти кнопки скрыть при распечатки документа или разместить их в другом месте, чтобы при печати документа их небыло? 2. При нажатие кнопки Сохранить. Содаеться документ с датой, но при повторном нажатие, содаеться документ с добавлением ещё текущей даты и так бесконца. Может, если документ уже сохранен, то не позволять его ещё раз сохранять. А выдовать сообщение об этом. А если пользователь захочит ещё раз сохранить документ, то он может просто воспользоваться стандартной кнопкой ms word)) Или может название файла с текущей датой, который будет сохраняться при нажатие кнопки прописать в самом коде, тогда будет проще проверить сохранен он уже с таким названием или нет. И тогда если даже пользователь переименует название файла шаблона, то при нажатие кнопки ему будет предложено сохранить с нужным названием)))
Спасибо большое, SLAVICK. Все работает как надо.
Вопрос ещё такой: 1. Можно ли эти кнопки скрыть при распечатки документа или разместить их в другом месте, чтобы при печати документа их небыло? 2. При нажатие кнопки Сохранить. Содаеться документ с датой, но при повторном нажатие, содаеться документ с добавлением ещё текущей даты и так бесконца. Может, если документ уже сохранен, то не позволять его ещё раз сохранять. А выдовать сообщение об этом. А если пользователь захочит ещё раз сохранить документ, то он может просто воспользоваться стандартной кнопкой ms word)) Или может название файла с текущей датой, который будет сохраняться при нажатие кнопки прописать в самом коде, тогда будет проще проверить сохранен он уже с таким названием или нет. И тогда если даже пользователь переименует название файла шаблона, то при нажатие кнопки ему будет предложено сохранить с нужным названием)))unkind85
Содаеться документ с датой, но при повторном нажатие, содаеться документ с добавлением ещё текущей даты и так бесконца.
Не понял? пример файла покажите (или хотя бы имени)- у меня дата в файле заменяется т.е. Был файл: файл.docm нажал сохранить -- сохранилось как : файл 06.11.2015.docm нажал еще раз сохранить -- сохранилось как : файл 06.11.2015.docm (т.е. файл перезаписался) - никакого повторного добавлении даты у меня нет. Добавил проверку - если имя открытого документа = нужному - выдает сообщение.
Содаеться документ с датой, но при повторном нажатие, содаеться документ с добавлением ещё текущей даты и так бесконца.
Не понял? пример файла покажите (или хотя бы имени)- у меня дата в файле заменяется т.е. Был файл: файл.docm нажал сохранить -- сохранилось как : файл 06.11.2015.docm нажал еще раз сохранить -- сохранилось как : файл 06.11.2015.docm (т.е. файл перезаписался) - никакого повторного добавлении даты у меня нет. Добавил проверку - если имя открытого документа = нужному - выдает сообщение.
SLAVICK, спасибо. У меня тоже файл перезаписываеться, если шаблон открываешь вновь. Но если в шаблоне нажал сохранить, и после ещё раз нажал сохранить, то на второе нажатие вновь добавляется дата. И если после нажимаешь открыть, то он ищет файл с уже двумя датами(но это работает правильно, изходя из кода программы)
SLAVICK, спасибо. У меня тоже файл перезаписываеться, если шаблон открываешь вновь. Но если в шаблоне нажал сохранить, и после ещё раз нажал сохранить, то на второе нажатие вновь добавляется дата. И если после нажимаешь открыть, то он ищет файл с уже двумя датами(но это работает правильно, изходя из кода программы)unkind85
А может во мне проблема. У меня ваша программа выдаёт ошибку 438 и ругаться на сточку ActiveDocumetnt.SaveAs2 FileName:=strPath & "\" & s Я убрал 2, оставил просто ActiveDocumetnt.SaveAs FileName:=strPath & "\" & s И ошибка пропала
А может во мне проблема. У меня ваша программа выдаёт ошибку 438 и ругаться на сточку ActiveDocumetnt.SaveAs2 FileName:=strPath & "\" & s Я убрал 2, оставил просто ActiveDocumetnt.SaveAs FileName:=strPath & "\" & s И ошибка пропалаunkind85