【发布时间】:2023-03-15 05:48:01
【问题描述】:
我正在尝试创建一个宏,该宏将在单击按钮时将列中的有效电子邮件地址复制到剪贴板,而忽略任何无效的电子邮件地址。我对 VBA 完全陌生,因此我遇到了一些困难。我已经查看了整个互联网和堆栈交换,这是我迄今为止能够提出的:
Private Sub CommandButton1_Click()
Dim clipboard As MSForms.DataObject
Dim Emails As String
Set r = Intersect(Range("B1").EntireColumn, ActiveSheet.UsedRange)
For Each i In r
If Trim(i) Like "?*@[!.]*.[!.]*" Then
If Not i Like "*@*@*" Then
Emails = Emails & i
End If
End If
Next i
clipboard.SetText Emails
clipboard.PutInClipboard
End Sub
此代码应该评估列中的每个单元格以确定电子邮件地址是否有效,如果有效,则将电子邮件地址附加到字符串电子邮件。完成后,字符串将被复制到剪贴板,以便可以将其粘贴到电子邮件客户端(即 Outlook)的“收件人”行中。我还考虑了其他解决方案,例如将所有有效的电子邮件地址添加到数组中,但是将数组复制到剪贴板似乎更复杂。无论哪种方式,如果有更优雅的解决方案,我都赞成。任何指针表示赞赏!
【问题讨论】:
-
这看起来像使用
LIKE的正则表达式验证,它不适用于LIKE。您需要添加 regex library 才能使用该类型的逻辑。 -
如果使用正则表达式,请包括一些预期的通过/失败案例。
-
哎呀,验证电子邮件can get really scary,OP。你在外面看着自己
-
一旦你确定了你的“email-address-looking-string”,并且是时候将它附加到你的
To:行,你需要把这个Emails = Emails & i改成这个@ 987654329@ - Outlook 使用;字符作为其默认电子邮件地址分隔符,您需要将其放入。否则,当您需要foo@bar.com; baz@biff.com时,您的字符串最终看起来像foo@bar.combaz@biff.com -
@Marcucciboy2 - 还有this page too 警告不要使用正则表达式来验证电子邮件。