VBA Excel如果基于文本框条目的声明

我正在尝试创build一个macros,使某人能够input一个文件名,然后input一个电子邮件列表号码来select一个特定的发行清单。 我已经联合了很多不同的代码来创build这个。 如果我只是将电子邮件放入“.to =”,它可以正常工作。 但是我想实现if语句,这个语句是基于哪个人员希望发送工作簿的清单。 当我运行macros时,它不会发送任何东西,我假设我的if语句无法正常工作。 有什么build议?

Sub Mail_workbook_Test() Dim OutApp As Object Dim OutMail As Object Dim Date1 As Date Date1 = Format(Now, "yyyy-mm-dd") 'Date and format Filename = Application.InputBox("Enter File Name:", "Input Box Text", "File Name") 'Type in File Name List = Application.InputBox("Enter Email List:", "Input Box Text", "List#") 'Type in Email List If List = "List1" Then emailaddress = "email3@provider.com; email4@provider.com" ElseIf List = "List2" Then emailaddress = "email@provider.com; email2@provider.com" End If Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(0) On Error Resume Next With OutMail .to = emailaddress .CC = "" .BCC = "" .Subject = "" + Filename + "" & " " & Date1 .Body = "Hi Everyone," & Chr(10) & Chr(10) & "Please let me know if you get this!" & Chr(10) & Chr(10) & "Thanks!""" .Attachments.Add ("C:\Users\Desktop\" + Filename + ".xlsx") .Send 'or use .Display End With On Error GoTo 0 Set OutMail = Nothing Set OutApp = Nothing End Sub 

我将在您的代码中评论一些pipe家项目,但不正确:

  1. 摆脱On Error Resume Next ,这可能会阻止您看到可能是失败根源的错误情况。
  2. 此外,您应该考虑使用FileDialog而不是input框来select文件。 这减轻了input框中用户错误的(非常可能的)机会。

我相信,但是这没有经过testing,即.To属性处理的显示名称,并根据文档是这样的情况:

该属性仅包含显示名称。 To属性对应于MAPI属性PidTagDisplayTo。 收件人集合应该被用来修改这个属性。

所以你可以试试这个:

 Dim recipient as Variant With OutMail For each recipient in Split(emailaddress, ";") .Recipients.Add Trim(recipient) Next .CC = "" .BCC = "" .Subject = "" + Filename + "" & " " & Date1 .Body = "Hi Everyone," & Chr(10) & Chr(10) & "Please let me know if you get this!" & Chr(10) & Chr(10) & "Thanks!""" .Attachments.Add ("C:\Users\Desktop\" + Filename + ".xlsx") .Send 'or use .Display End With 

我无法testing,因为我的家用机器上没有Outlook,但如果您怀疑这是您的If例程,那么它的失败,我build议添加一个额外的语句来捕捉不良的用户input。 这里是完整的If语句和一个额外的最终“Else”(意思是“如果没有满足以前的条件,那就这样做”):

 If List = "List1" Then emailaddress = "email3@provider.com; email4@provider.com" ElseIf List = "List2" Then emailaddress = "email@provider.com; email2@provider.com" Else MsgBox "Sorry, your list selection was not recognised." Exit Sub End If 

这将保证你的'emailaddress'variables被正确设置,或者你得到一个有用的错误信息。 希望这是一些帮助。