Forms MS Word 2013表单,使用宏创建另存为和提交按钮

Forms MS Word 2013表单,使用宏创建另存为和提交按钮,forms,vba,ms-word,save-as,Forms,Vba,Ms Word,Save As,我在Word 2013中有一个简单的表单(来自模板),并有一个“提交”按钮,该按钮将: 1.从文档中的字段收集信息,命名文档并另存为。 2.通过电子邮件将表单发送到预设的电子邮件地址 多人将从模板中打开一个文档 Private Sub CommandButton21_Click() Dim OL As Object Dim EmailItem As Object Dim Doc As Document Dim strTagNum As

我在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 = "john.doe@example.com"
.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上的尼尔·马莱克)
而这个话题

我的问题是:
1.如何为saveAs指定文件路径?宏中有代码,但文档保存在单个用户的文档文件夹中

  • 如何告诉宏从表单中提取用户名并将其发送到“username”@example.com
  • 宏的其余部分工作正常,当按下“提交”按钮时,文档将被重命名、保存并作为电子邮件发送到预设的电子邮件地址

    我更新了原来的问题,通过反复试验,我能够回答我以前的一些问题


    感谢您的时间。

    多亏了这个有用的链接,我能够挖掘更多信息并解决问题的最后一部分:

    我最后引用了附加了&“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 = "john.doe@example.com; onsiteengr@example.com; chrip@example.com"
    .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
    

    感谢所有看过的人,感谢他们提供了有用的代码和评论

    所以你不想另存为模板?那么您希望保存为哪种类型的文件?模板将位于中心位置,许多用户将从中打开Document1.docx。我希望Document1.docx保存为特定位置,文件名取自表单。您需要保存它,包括路径:
    Doc.SaveAs2 StrPath&“\”&strFilename
    。最好事先检查文件夹StrPath是否存在。也可以考虑一些UNC路径,而不是<代码> v:<代码> > <代码> \FieleServNas\Debug \/Calp>或<代码> \YouWorkDeave.COM\DFSRooS\Stuto\Debug \/Cord>。或者,添加CustomDocumentProperties来存储此路径。这对包含该路径很有效,谢谢!我很想使用UNC路径,但是对于这个应用程序,公司并没有这样设置。