我需要从两个分隔符之间提取一个字符串,具体来说,我必须将一个电子邮件地址附加到附件文件名,以便可以处理它并将其发送回发件人。 (这是在Outlook 2013 VBA中)
文件名的格式为: 的 ADDR johnDOTdoeATfooDOTcom的 XADDR A646A10.FOO
我的分隔符 ADDR 和 XADDR
我需要做的是拆分字符串并在分隔符之间返回电子邮件字符串和XADDR之后的文件名。
电子邮件地址和文件名的长度可能不同,文件扩展名也不固定。
修复的是ADDR将始终是前4个字符,而.XXX将是最后3个字符。
答案 0 :(得分:2)
您可以使用InStr函数查找第二个分隔符(&#34; XADDR&#34;在本例中)的开始位置,以及Mid函数来提取所需的部分:< / p>
Sub InstrDemo()
Dim s, delim1, delim2 As String
s = "ADDRjohnDOTdoeATfooDOTcomXADDRA646A10.FOO"
delim1 = "ADDR"
delim2 = "XADDR"
Dim pos As Integer
pos = InStr(s, delim2)
Dim part1, part2 As String
part1 = Mid(s, Len(delim1) + 1, pos - Len(delim1) - 1)
part2 = Mid(s, pos + Len(delim2))
MsgBox (part1 & vbCrLf & part2)
End Sub
输出:
(我使用的是Excel 2013,因为当时它更容易。)
最好将分隔符放在这样的字符串中,因为它避免使用"magic numbers"。
或者您可以使用Split功能:
Sub SplitDemo()
Dim s, delim1, delim2 As String
s = "ADDRjohnDOTdoeATfooDOTcomXADDRA646A10.FOO"
delim1 = "ADDR"
delim2 = "XADDR"
s = Mid(s, Len(delim1) + 1)
Dim parts() As String
parts = Split(s, delim2)
' optional: check that the correct number of parts were found...
If UBound(parts) <> 1 Then
MsgBox ("Wrong number of parts.")
End If
MsgBox (parts(0) & vbCrLf & parts(1))
End Sub
它提供与前一种方法相同的输出。
答案 1 :(得分:1)
如果使用正则表达式很容易,可以使用此链接作为参考How to use Regular Expressions (Regex) in Microsoft Excel both in-cell and loops
您可以使用正常表达式,例如“ADDR(。*)XADDR”,这将为您提供电子邮件地址