【发布时间】:2017-11-15 12:48:59
【问题描述】:
我不太习惯用 VBA 编程。我的目标是制作一个可以传递给我的同事的脚本,因为他们有很长的 Excel 文件,其中的一列包含多个单词,包括一个电子邮件地址。例如:公司用户 user@company.com
我的正则表达式无法传递所有数据,似乎无法过滤掉任何内容。
Function isEmail(ByVal data As String)
Dim mailReg As Object
Set mailReg = CreateObject("VBScript.RegExp")
Dim regpattern As String
regpattern = "^[_a-z0-9-]+(.[a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$" 'Expression ok
Dim arr1() As String
Dim element As Variant
Dim strInput As String
arr1() = Split(data, " ")
For Each element In arr1
If regpattern <> "" Then
strInput = element
With mailReg
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = regpattern
End With
MsgBox (strInput)
End If
Next element
End Function
我也试过用
For Each element In arr1
If element Like regpattern Then
MsgBox (element)
End If
Next element
End Function
但随后 MsgBox 中什么也没有出现..
【问题讨论】:
-
为什么
If regpattern <> "" Then- 不应该是If element<> ""那么` -
这段代码一团糟。正则表达式不正确。你想做什么?在字符串中找到每封电子邮件时显示一条消息?然后使用
Sub,而不是Function。 -
电子邮件地址可以包含非字母数字字符,例如 "、!、# 和 $。来源:Wikipedia。