Форма MS Word 2013, создайте кнопку «Сохранить как» и «Отправить» с помощью макроса

У меня есть простая форма (из шаблона) в Word 2013 и кнопка "Отправить", которая позволяет:
1. Собрать информацию из полей документа, назвать документ и сохранить как.
2. Отправить по электронной почте форма для предварительно заданных адресов электронной почты.

Несколько человек откроют документ из шаблона

Private Sub CommandButton21_Click()
Dim OL              As Object
Dim EmailItem       As Object
Dim Doc             As Document
Dim strTagNum As String, strNTID As String, strDate As String

strTagNum = ActiveDocument.SelectContentControlsByTitle("TagNum")(1).Range.Text
strNTID = ActiveDocument.SelectContentControlsByTitle("NTID")(1).Range.Text
strDate = ActiveDocument.SelectContentControlsByTitle("Date")(1).Range.Text
Dim strFilename As String
strFilename = strTagNum & "_" & strNTID & "_" & Format(strDate, "ddmmyyyy") & ".docx"
StrPath = "V:\OPS\Central\Shared\ARM\ALERT"

Application.ScreenUpdating = False
Set OL = CreateObject("Outlook.Application")
Set EmailItem = OL.CreateItem(olMailItem)
Set Doc = ActiveDocument

Doc.SaveAs2 strFilename


With EmailItem
.Subject = "CGF ARM - ALERT ADD/DROP/CHANGE"
.Body = "Please Review this Alert for Continuous Improvement"
.To = "[email protected]"
.Importance = olImportanceNormal
.Attachments.Add Doc.FullName
.Send
End With

Application.ScreenUpdating = True

MsgBox "Alert Record Submitted"

Set Doc = Nothing
Set OL = Nothing
Set EmailItem = Nothing


End Sub

(Кредит Нила Малека на knacktraining.com)
и эта тема
Макрос Microsoft Word 2013 сохранить имя файла из содержимого формы

Мои вопросы:
1. Как мне указать путь к файлу для сохранения как? У меня есть код в макросе, но документ сохраняется в папке «Документы» отдельных пользователей.

  1. Как сообщить макросу, чтобы он извлек имя пользователя из формы и отправил его на адрес «username»@example.com?

Остальная часть макроса работает, когда нажимается кнопка «Отправить», документ переименовывается, сохраняется и отправляется по электронной почте на заранее заданные адреса электронной почты.

Я обновил это из исходного вопроса, я смог ответить на некоторые из моих предыдущих вопросов методом проб и ошибок.

Спасибо за уделенное время.


person ThunderJ    schedule 14.02.2017    source источник
comment
Итак, вы не хотите сохранять как шаблон? то какой тип файла вы хотите сохранить как?   -  person 0m3r    schedule 15.02.2017
comment
Шаблон будет центральным, и многие пользователи откроют из него Document1.docx. Я бы хотел, чтобы Document1.docx был сохранен как в определенном месте с именем файла, взятым из формы.   -  person ThunderJ    schedule 15.02.2017
comment
Вам нужно сохранить его, указав путь: Doc.SaveAs2 StrPath & "\" & strFilename. Лучше заранее проверить, существует ли папка StrPath. Также рассмотрите несколько путей UNC вместо V:, таких как \\FileServerNAS\Documents\ или \\YourWorkDomain.com\DFSroot\Site\Documents\ . Либо добавьте CustomDocumentProperties, чтобы сохранить этот путь.   -  person PatricK    schedule 16.02.2017
comment
Это сработало для включения пути, спасибо! Я хотел бы использовать путь UNC, но для этого приложения компания не настроена таким образом.   -  person ThunderJ    schedule 18.02.2017


Ответы (1)


Я смог копнуть еще немного и решить последнюю часть моей проблемы благодаря этой полезной ссылке:

excel: значение ячейки ссылки, чтобы получить получателя электронной почты для выбранная строка?

В итоге я сослался на значение поля, добавленное с & «example.com», а затем .CC на строку, сработало как шарм!

Вот код в целом, я очень поверхностный пользователь vba, поэтому я уверен, что есть более чистые способы, но, похоже, это работает для того, что мне нужно.

Private Sub CommandButton21_Click()
Dim OL              As Object
Dim EmailItem       As Object
Dim Doc             As Document
Dim strTagNum As String, strNTID As String, strDate As String

strTagNum = ActiveDocument.SelectContentControlsByTitle("TagNum")(1).Range.Text
strNTID = ActiveDocument.SelectContentControlsByTitle("NTID")(1).Range.Text
strDate = ActiveDocument.SelectContentControlsByTitle("Date")(1).Range.Text
Dim strFilename As String
strFilename = strTagNum & "_" & strNTID & "_" & Format(strDate, "ddmmyyyy") & ".docx"
Email_Send_To = strNTID & "@example.com"

Application.ScreenUpdating = False
Set OL = CreateObject("Outlook.Application")
Set EmailItem = OL.CreateItem(olMailItem)
Set Doc = ActiveDocument

Doc.SaveAs2 StrPath & "V:\Central\Shared\ARM\ALERT\SubmittedForms\" & strFilename


With EmailItem
.Subject = "Continuous Improvement"
.Body = "Please Review this Alert for Continuous Improvement"
.To = "[email protected]; [email protected]; [email protected]"
.CC = Email_Send_To
.Importance = olImportanceNormal
.Attachments.Add Doc.FullName
.Send
End With

Application.ScreenUpdating = True

MsgBox "Alert Record Submitted"

Set Doc = Nothing
Set OL = Nothing
Set EmailItem = Nothing


End Sub

Спасибо всем, кто заглянул, за полезный код и комментарии!

person ThunderJ    schedule 18.02.2017