获取2个字符串之间的字符串,以及父字符串

时间:2017-06-21 09:01:26

标签: vba outlook-vba

我需要从两个分隔符之间提取一个字符串,具体来说,我必须将一个电子邮件地址附加到附件文件名,以便可以处理它并将其发送回发件人。 (这是在Outlook 2013 VBA中)

文件名的格式为: 的 ADDR johnDOTdoeATfooDOTcom的 XADDR A646A10.FOO

我的分隔符 ADDR XADDR

我需要做的是拆分字符串并在分隔符之间返回电子邮件字符串和XADDR之后的文件名。

电子邮件地址和文件名的长度可能不同,文件扩展名也不固定。

修复的是ADDR将始终是前4个字符,而.XXX将是最后3个字符。

2 个答案:

答案 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

输出:

enter image description here

(我使用的是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”,这将为您提供电子邮件地址