VBA удаляет участника из списка рассылки и контактов

#vba #outlook

Вопрос:

Я делаю небольшую программу для удаления серии сообщений электронной почты/человека из csv-файла «delete.csv», который содержит имя,фамилию, адрес электронной почты

Мне нужно удалить всех этих людей как из списка контактов, так и из списка рассылки, это работает для контакта, но не работает для списка рассылки.

вот фрагмент кода, который я использую

      IF oItem:Class == olDistributionList                        
        oDistList   := oContactItems:item( jj )
        //MsgInfo( oDistList:Class )  --> 69 = DistList
        
        nCount2 := oDistList:MemberCount
        //MsgInfo( nCount2 )                       --> 3 
        //MsgInfo( oDistList:DLName )              --> A. Kitchen
        //MsgInfo( oDistList:GetMember( 1 ):Name ) --> email
        
        FOR kk := 1 TO nCount2                
            oMember  := oDistList:GetMember( kk )  // --> oRecipient
            cDistListItemName := oDistList:GetMember( kk ):Name
            //MsgInfo( Lower( cDistListItemName )   CRLF   cEmail )                
            
            IF Lower( cDistListItemName ) == Lower( cEmail )
               MsgInfo( "Matched "   cEmail )
               //oMember:Delete()        
               oDistList:GetMember( kk ):Delete()   // does not work
            ENDIF
        NEXT
        oDistList:Save()   // Still does not delete member
     ENDIF  
 

открыв outlook, я вижу, что все контакты в файле csv были удалены, но ни одна запись в списке рассылки не была удалена, также программа не показывает никаких ошибок и завершается нормально

Чего мне не хватает, чтобы это сработало.

Я добавил вызов oDistList:Save (), но по-прежнему ничего не изменилось, ни один участник из списка рассылки не удален.

После повторного прочтения документации Microsoft по адресу https://docs.microsoft.com/en-us/office/vba/api/outlook.distlistitem

Я видел метод RemoveMember

Теперь все работает с использованием следующего кода

      IF oItem:Class == olDistributionList                        
        oDistList   := oContactItems:item( jj )
        //MsgInfo( oDistList:Class )  --> 69 = DistList
        
        nCount2 := oDistList:MemberCount
        //MsgInfo( nCount2 )                       --> 3 
        //MsgInfo( oDistList:DLName )              --> A. Cuisine
        //MsgInfo( oDistList:GetMember( 1 ):Name ) --> email
        
        FOR kk := 1 TO nCount2                
            oMember  := oDistList:GetMember( kk )  // --> oRecipient
            cDistListItemName := oDistList:GetMember( kk ):Name
            //MsgInfo( Lower( cDistListItemName )   CRLF   cEmail )                
            //MsgInfo( Str( Len( AllTrim( cDistListItemName ) ), 3, 0 )   " "   Str( Len( AllTrim( Lower( cEmail ) ) ), 3, 0 ) )
            
            IF AllTrim( Lower( cDistListItemName ) ) == AllTrim( Lower( cEmail ) )
               MsgInfo( "Matched "   cEmail   " "   oDistList:DLName )

               oDistList:RemoveMember( oMember )
               
               EXIT                                     
            ENDIF
        NEXT
        
        oDistList:Save()
        
     ENDIF  
 

Комментарии:

1. Вы звоните в oDistList. Сэкономить потом?