Копирование части строки с использованием vba - PullRequest
0 голосов
/ 17 мая 2018

Мне нужно получить имя пользователя из MeetingItem.Recipient, я попытался получить его следующим образом: CStr(MeetingItem.Recipient.Address) и получил ответ: "/o=POST/ou=Zuerich/cn=Recipients/cn=eicherr" Мне нужно сделать цикл по всем получателям и получить имена пользователей, например, если я запутался с кодомвыше получит:

"/o=POST/ou=Zuerich/cn=Recipients/cn=eicherr"
"/o=POST/ou=Group (FYHF23PDLT)/cn=Recipients/cn=kisslingie0e"
"/o=POST/ou=Group (FYHF23PDLT)/cn=Recipients/cn=katzensteink"
"/O=POST/OU=Bern/cn=Recipients/cn=junkerb"
"/o=POST/ou=Group (FYHF23PDLT)/cn=Recipients/cn=tanzg6a7"

Мне нужна только последняя часть этогостроки, как я могу это сделать?

примечание: kisslingie0e и tanzg6a7 этот псевдоним содержит в конце три ненужных символа, которых также следует избегать

Или есть другой способ получить имена пользователей из MeetingItem.Recipient.Adress.Чтобы получить электронную почту, я сделал следующее:

For Each recip In recips

    'Obtain the E-mail Address of a Recipient
    Dim pa As Outlook.PropertyAccessor
    Const PR_SMTP_ADDRESS As String = _
        "http://schemas.microsoft.com/mapi/proptag/0x39FE001E"
    Set pa = recip.PropertyAccessor

    Dim email as String
    email = CStr(pa.GetProperty(PR_SMTP_ADDRESS))
    Debug.Print email

End For

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

Вот еще одно предложение, которое работает, ЕСЛИ в источнике согласовано наличие «Recipients / cn =» непосредственно перед желаемой строкой, за которым следует необязательное удаление последних символов, если они являются числовыми в третьем или втором или последнем символе.

    'find the location of constant, set vEM
    vLoc = InStr(email, "Recipients/cn=")
    vEM = Mid(email, vLoc + 14, 50)
    'Check if third to last or second to last character is numeric
    vOffset = 0
    If IsNumeric(Mid(vEM, Len(vEM) - 2, 1)) Then
       vOffset = 3
    ElseIf IsNumeric(Mid(vEM, Len(vEM) - 1, 1)) Then
       vOffset = 2
    Else
       vOffset = 0
    End If
    vEM = Left(vEM, Len(vEM) - vOffset)
0 голосов
/ 17 мая 2018

Используйте Recipient.AddressEntry.GetExchangeUser().PrimarySmtpAddress для получения SMTP-адреса.
Будьте готовы к обработке пустых значений и ошибок.

Чтобы получить логин NT (учетная запись домена), прочитайте свойство PR_ACCOUNT MAPI (DASL).имя http://schemas.microsoft.com/mapi/proptag/0x3A00001F) с использованием Recipient.AddressEntry.PropertyAccessor.GetProperty.

Вы также можете использовать Recipient.AddressEntry.GetExchangeUser().Alias

0 голосов
/ 17 мая 2018

Самый простой способ удалить начальный текст - это повернуть строку и цикл, пока не найдете "/":

Dim email As String, username As String
Dim i As Integer

email = "/o=POST/ou=Group (FYHF23PDLT)/cn=Recipients/cn=kisslingie0e"

'Reverse string
email = StrReverse(email)

'Loop through string until / is found
For i = 1 To Len(email) Step 1
    If Mid(email, i, 1) = "/" Then
        Exit For
    Else
        username = username & Mid(email, i, 1)
    End If
Next i

'Reverse username
username = StrReverse(username)

Если вам нужно удалить «cn =», сделайте что-то вроде этого:

username = Split(username, "=")(1)

Если имена пользователей никогда не содержат цифр, вы можете удалить след следующим образом:

For i = 1 To Len(username) Step 1
    'Loop until a number occurs
    If IsNumeric(Mid(username, i, 1)) Then
        'Use string until the number
        username = Mid(username, 1, i - 1)
        Exit For
    End If
Next i
...