【转载】VBA从字符串中提取电子邮件的函数-金宇
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access数据库-模块/函数/VBA


【转载】VBA从字符串中提取电子邮件的函数

发表时间:2020/6/23 8:49:16 评论(1) 浏览(5112)  评论 | 加入收藏 | 复制
   
摘 要:通过正则表达式提取电子邮件。
正 文:

主要通过正则表达式来提取字符串中的电子邮件,代码如下:

'---------------------------------------------------------------------------------------
' Procedure : ExtractEmailAddresses
' Author    : Daniel Pineault, CARDA Consultants Inc.
' Website   : http://www.cardaconsultants.com
' Purpose   : Extract e-mail addresses from a supplied string
' Notes     : None
' Copyright : The following is release as Attribution-ShareAlike 4.0 International
'             (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/
' Req'd Refs: Uses Late Binding, so none required
'
' Input Variables:
' ~~~~~~~~~~~~~~~~
' sInput    : String to parse/extract e-mail addresses from
'
' Usage:
' ~~~~~~
' See TestMe Sub
'
' Revision History:
' Rev       Date(yyyy/mm/dd)        Description
' **************************************************************************************
' 1         2020-05-13              Initial Release, Forum Help
' 2         2020-05-17              Added a more advanced pattern
'---------------------------------------------------------------------------------------
Public Function ExtractEmailAddresses(ByVal sInput As Variant) As Variant
    On Error GoTo Error_Handler
    Dim oregEx                As Object
    Dim oMatches              As Object
    Dim oMatch                As Object
    Dim sEmail                As String
 
    If Not IsNull(sInput) Then
        Set oregEx = CreateObject("vbscript.regexp")
        With oregEx
            'Basic pattern
            '.Pattern = "([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)"
            'More advanced pattern that allow accented characters
            .Pattern = "([a-zA-ZF0-9\u00C0-\u017F._-]+@[a-zA-Z0-9\u00C0-\u017F._-]+\.[a-zA-Z0-9\u00C0-\u017F_-]+)"
            .Global = True
            .IgnoreCase = True
            .MultiLine = True
            Set oMatches = .Execute(sInput)
        End With
        For Each oMatch In oMatches
            sEmail = oMatch.Value & "," & sEmail
        Next oMatch
        If Right(sEmail, 1) = "," Then sEmail = Left(sEmail, Len(sEmail) - 1)
 
        ExtractEmailAddresses = Split(sEmail, ",")    'Return an array of email addresses extracted from sInput
    Else
        ExtractEmailAddresses = Null
    End If
 
Error_Handler_Exit:
    On Error Resume Next
    If Not oMatch Is Nothing Then Set oMatch = Nothing
    If Not oMatches Is Nothing Then Set oMatches = Nothing
    If Not oregEx Is Nothing Then Set oregEx = Nothing
    Exit Function
 
Error_Handler:
    MsgBox "The following error has occured" & vbCrLf & vbCrLf & _
           "Error Number: " & Err.Number & vbCrLf & _
           "Error Source: ExtractEmailAddresses" & vbCrLf & _
           "Error Description: " & Err.Description & _
           Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
           , vbOKOnly + vbCritical, "An Error has Occured!"
    Resume Error_Handler_Exit
End Function

附   件:

点击下载此附件


图   示:


Access软件网交流QQ群(群号:198465573)
 
 相关文章
【Access示例】通过outlookup发送邮件(可以附带附件)  【缪炜  2015/2/20】
调用Outlook发送邮件  【易勋  2018/7/15】
调用Outlook发送邮件-预览邮件  【易勋  2018/10/11】
调用Outlook发送邮件-附带签名  【易勋  2018/10/25】
调用Outlook发送邮件-内置软件打开方式  【易勋  2018/10/28】
【Access示例】通过邮件将数据库对象寄出去  【杨雪  2019/6/8】
常见问答
技术分类
相关资源
文章搜索
关于作者

金宇

文章分类

文章存档

友情链接