从Userform下拉菜单中选择电子邮件模板 - 对象是必需的

时间:2017-07-26 09:04:56

标签: vba forms outlook-vba

我正在尝试创建一个Outlook Userform,通过下拉菜单,操作员可以选择一个电子邮件模板。

使用this示例,这是Outlook表单的代码,可以正常工作。

Private Sub UserForm_Initialize()
    With ComboBox1
        .AddItem "Test"
        .AddItem "Template 2"
        .AddItem "Template 3"
        .AddItem "Template 7"
        .AddItem "Template 5"
        .AddItem "Template 6"
    End With
End Sub

Private Sub btnOK_Click()
    lstNum = ComboBox1.ListIndex
    Unload Me
End Sub

这是我开始整理的代码,用于选择模板。当我使用下拉菜单选择“测试模板”时,我在此处收到错误“Test.Select”,突出显示对象是必需的。

Public lstNum As Long

Public Sub ChooseTemplate()

    Dim oMail As Outlook.MailItem
    Dim oContact As Outlook.ContactItem

    Dim strTemplate As String
    UserForm1.Show

    Select Case lstNum
    Case -1
    '  -1 is what you want to use if nothing is selected
         strTemplate = "Test"
    Case 0
         strTemplate = "template-1"
    Case 1
        strTemplate = "template-2"
    Case 2
         strTemplate = "template-3"
    Case 3
         strTemplate = "template-4"
    Case 4
         strTemplate = "template-5"
    End Select

    Test.Select
    Set OutMail = OutApp.CreateItem(0)
    On Error Resume Next
    With OutMail
        .To = cell.Value
        .Subject = "Test Facility"
        .HTMLBody = "<BODY style=font-size:11pt;font-family:Calibri>Hi " You recently confirmed you require continued use of the test facility
            "<p>Many thanks and kind regards</p></BODY>" & Signature
        .Sensitivity = 2
        .Send
    End With
    On Error GoTo 0
    Set OutMail = Nothing

    cleanup:
    Set OutApp = Nothing
    Application.ScreenUpdating = True

    wb.Close savechanges:=True

    End If

    Set oMail = Nothing

End Sub

1 个答案:

答案 0 :(得分:0)

要从模板生成邮件,请参阅https://msdn.microsoft.com/VBA/Outlook-VBA/articles/application-createitemfromtemplate-method-outlook

Set MyItem = Application.CreateItemFromTemplate("C:\statusrep.oft")

在Outlook中运行此代码以查看如何使用选择。

Public lstNum As Long

Public Sub ChooseTemplate()

    Dim outMail As Outlook.MailItem

    UserForm1.Show

    Select Case lstNum

    ' Following the listbox entries

    Case -1
    '  -1 is what you want to use if nothing is selected
        Set OutMail = CreateItemFromTemplate("Path\to\test.oft")

    Case 0
        Set OutMail = CreateItemFromTemplate("Path\to\test.oft")

    Case 1
        Set OutMail = CreateItemFromTemplate("Path\to\template-2.oft")

    Case 2
        Set OutMail = CreateItemFromTemplate("Path\to\template-3.oft")

    Case 3
        Set OutMail = CreateItemFromTemplate("Path\to\template-7.oft")

    Case 4
        Set OutMail = CreateItemFromTemplate("Path\to\template-5.oft")

    Case 5
        Set OutMail = CreateItemFromTemplate("Path\to\template-6.oft")

    End Select

    ' Use for a specific purpose not randomly
    ' On Error Resume Next

    With OutMail
        .To = "cell.Value"    ' For this Outlook demo

        ' This should be in the template
        ' .Subject = "Test Facility"
        ' .HTMLBody = "<BODY style=font-size:11pt;font-family:Calibri>Hi " You recently confirmed you require continued use of the test facility
        '       "<p>Many thanks and kind regards</p></BODY>" & Signature
        ' .Sensitivity = 2

        .Display
    End With

    ' On Error GoTo 0

    cleanup:
        Set OutMail = Nothing

  End Sub