【问题标题】:Excel VBA - Verify if the checkboxes are selected and concatenate respective textboxes's valuesExcel VBA - 验证复选框是否被选中并连接各个文本框的值
【发布时间】:2017-05-12 06:08:23
【问题描述】:

我是 Excel VBA 的初学者,希望得到一些帮助。

在客户注册用户表单中,我有一个“联系人”部分,该部分将保留用于接收正在注册的客户的最多 5 封联系电子邮件。在这个用户表单中,我有以下对象:

  • 5 个文本框(txtEmail1txtEmail2txtEmail3、...)
  • 5 个复选框(ckboxEmail1ckboxEmail2ckboxEmail3、...)
  • 1 个命令按钮 (bSendEmail)

将在文本框中键入电子邮件,然后使用该按钮打开 Outlook 应用程序,其中电子邮件已经在“收件人”字段中。复选框将用于定义哪些电子邮件将包含在“收件人”字段中。

我的疑惑来了。如何验证选中了哪些复选框,以仅使用(连接)来自文本框中的电子邮件?

实例一:

TxtEmail1.value = email1@example.com
TxtEmail2.value = email2@example.com
TxtEmail3.value = empty
TxtEMail4.value = email4@example.com
TxtEMail5.value = empty

CkboxEmail1.value = true
CkboxEmail2.value = true
CkboxEmail3.value = false
CkboxEmail4.value = true
CkboxEmail5.value = false

当我按下按钮时,必须将以下数组传递给“.To”属性:

.To = "email1@example.com;email2@example.com;email4@example.com"

实例二:

TxtEmail1.value = email1@example.com
TxtEmail2.value = email2@example.com
TxtEmail3.value = empty
TxtEMail4.value = email4@example.com
TxtEMail5.value = empty

CkboxEmail1.value = false
CkboxEmail2.value = false
CkboxEmail3.value = false
CkboxEmail4.value = true
CkboxEmail5.value = false

当我按下按钮时,只有第四封电子邮件会被传递给“.To”属性,因为只有它的复选框为真:

.To = "email4@example.com"

下面是我用来在 bSendEmail Click 事件中打开 Outlook 应用程序的代码。

Private Sub bSendEmail_Click()

Dim outlookApp       As Object
Dim outlookMail      As Object

On Error GoTo error_outlook
Set outlookApp = CreateObject("Outlook.Application")
Set outlookMail = outlookApp.CreateItem(0)
On Error GoTo 0

On Error Resume Next
With outlookMail
    .To = ""
    .CC = ""
    .BCC = ""
    .Subject = ""
    .Body = ""
    .Importance = 2
    .Display
End With
On Error GoTo 0

Set outlookMail = Nothing
Set outlookApp = Nothing

Exit Sub

error_outlook:

    MsgBox("some message here...", vbOKOnly + vbExclamation, "ERROR - Outlook")
    Exit Sub

End Sub

提前致谢,抱歉英语不好,不是我的母语。

【问题讨论】:

    标签: vba excel email checkbox


    【解决方案1】:

    改变

    .To = ""
    

    Dim TempTo As String
    TempTo = ""
    If CkboxEmail1 Then TempTo = TempTo & TxtEmail1.value & ";"
    If CkboxEmail2 Then TempTo = TempTo & TxtEmail2.value & ";"
    If CkboxEmail3 Then TempTo = TempTo & TxtEmail3.value & ";"
    If CkboxEmail4 Then TempTo = TempTo & TxtEmail4.value & ";"
    If CkboxEmail5 Then TempTo = TempTo & TxtEmail5.value & ";"
    

    之后可能会添加一点额外的代码,以防止出现未检查 CkBox 的问题:

    If Len(TempTo) = 0 Then
        MsgBox "No email addresses selected"
        Exit Sub
    End If
    

    最后:

    .To = TempTo
    

    【讨论】:

    • 感谢您的快速回复!关于复选框,代码运行良好(非常感谢),但我不知道 Excel 为什么忽略分号。 Outlook 的“收件人”字段中的结果如下所示:email1@example.comemail2@example.comemail4@example.com 电子邮件没有用分号分隔。
    • @IgorSousa Ahh - 也许outlookMail 对象会自动修剪掉任何尾随;。我将编辑代码以使用临时变量。
    猜你喜欢
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2013-05-08
    • 2013-01-25
    • 2019-03-05
    相关资源
    最近更新 更多