powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / VBA - Извлечение контактов Outlook
8 сообщений из 8, страница 1 из 1
VBA - Извлечение контактов Outlook
    #39840877
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VBA - Извлечение контактов Outlook
Статья Даниэля Пино - https://www.devhut.net/2019/07/15/vba-extract-outlook-contacts/

Помогая с вопросами на форуме относительно очень ограниченной информации, возвращаемой при использовании External Data -> Import & Link -> More -> Outlook Folder. Обычно указываю, что VBA дает вам возможность получить более расширенную информацию. Это верно при взаимодействии с Outlook and Outlook Contacts . Ниже приведено начало процедуры извлечения любой информации из папки «Контакты».
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
'---------------------------------------------------------------------------------------
' Procedure : Outlook_ExtractContacts
' Author    : Daniel Pineault, CARDA Consultants Inc.
' Website   : http://www.cardaconsultants.com
' Purpose   : Extract contact information from Outlook
' Copyright : The following is release as Attribution-ShareAlike 4.0 International
'             (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/
' Req'd Refs: Uses Late Binding, so none required
'
' Usage:
' ~~~~~~
' Call Outlook_ExtractContacts
'
' Revision History:
' Rev       Date(yyyy/mm/dd)        Description
' **************************************************************************************
' 1         2019-07-15              Initial Release - Forum Help
'---------------------------------------------------------------------------------------
Sub Outlook_ExtractContacts()
    Dim oOutlook              As Object    'Outlook.Application
    Dim oNameSpace            As Object    'Outlook.Namespace
    Dim oFolder               As Object    'Outlook.folder
    Dim oItem                 As Object
    Dim oPrp                  As Object
    Const olFolderContacts = 10
    Const olContact = 40
 
    On Error Resume Next
    Set oOutlook = GetObject(, "Outlook.Application")        'Bind to existing instance of Outlook
    If Err.Number <> 0 Then        'Could not get instance, so create a new one
        Err.Clear
        Set oOutlook = CreateObject("Outlook.Application")
    End If
    On Error GoTo Error_Handler
 
    Set oNameSpace = oOutlook.GetNamespace("MAPI")
    Set oFolder = oNameSpace.GetDefaultFolder(olFolderContacts)
 
    On Error Resume Next
    For Each oItem In oFolder.Items
        With oItem
            If .Class = olContact Then
                Debug.Print .EntryId, .FullName, .FirstName, .LastName, .CompanyName
                For Each oPrp In .ItemProperties
                    Debug.Print , oPrp.Name, oPrp.Value
                Next oPrp
            End If
        End With
    Next oItem
 
Error_Handler_Exit:
    On Error Resume Next
    If Not oPrp Is Nothing Then Set oPrp = Nothing
    If Not oItem Is Nothing Then Set oItem = Nothing
    If Not oFolder Is Nothing Then Set oFolder = Nothing
    If Not oNameSpace Is Nothing Then Set oNameSpace = Nothing
    If Not oOutlook Is Nothing Then Set oOutlook = Nothing
    Exit Sub
 
Error_Handler:
    MsgBox "The following error has occured" & vbCrLf & vbCrLf & _
           "Error Number: " & Err.Number & vbCrLf & _
           "Error Source: Outlook_ExtractContacts" & vbCrLf & _
           "Error Description: " & Err.Description & _
           Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
           , vbOKOnly + vbCritical, "An Error has Occured!"
    Resume Error_Handler_Exit
End Sub



Я использую On Error Resume Next , чтобы иметь возможность перебирать все ItemProperties без сбоев моего кода (чтобы показать вам, какая информация на самом деле доступна для вас). Но если Вам нужны только отдельные поля, то Вам лучше просто указать конкретные поля, как я сделал в строке
Код: vbnet
1.
Debug. Печать .EntryId, .FullName, .FirstName, .LastName, .CompanyName



-------------------------------------------------------------
А ты вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса?
...
Рейтинг: 0 / 0
VBA - Извлечение контактов Outlook
    #39841189
ldfanate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что подсказывает, что On Error Resume Next пользуете неправильно.
Она ведь у вас перед циклом, а не внутри. А после каждого оборота Debug.Print , oPrp.Name, oPrp.Value нету Err.Clear (либо повторного On Error). Т.е. двойные и кратные ошибки всёравно выпадут в ошибку.
...
Рейтинг: 0 / 0
VBA - Извлечение контактов Outlook
    #39841417
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, у меня прошло нормально.
...
Рейтинг: 0 / 0
VBA - Извлечение контактов Outlook
    #39841894
ldfanate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да повезло просто. В справке по On Error этот момент с двойными ошибками внятно описан ещё лет так 15 назад, но на эти грабли VB/VBA-разработчики бывает наступают досихпор.
...
Рейтинг: 0 / 0
VBA - Извлечение контактов Outlook
    #39841900
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldfanateчто подсказывает, что On Error Resume Next пользуете неправильно.
Она ведь у вас перед циклом, а не внутри. А после каждого оборота Debug.Print , oPrp.Name, oPrp.Value нету Err.Clear (либо повторного On Error). Т.е. двойные и кратные ошибки всёравно выпадут в ошибку.О чём это ?
Что за "двойные и кратные ошибки" ?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub test()
On Error Resume Next
    Dim i As Long
    Dim Temp As Long
    
    i = 0
    Do While i < 10
        Temp = i / 0
        Debug.Print i, Err.Description
        i = i + 1
    Loop
End Sub


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 0            Overflow
 1            Division by zero
 2            Division by zero
 3            Division by zero
 4            Division by zero
 5            Division by zero
 6            Division by zero
 7            Division by zero
 8            Division by zero
 9            Division by zero
...
Рейтинг: 0 / 0
VBA - Извлечение контактов Outlook
    #39841969
ldfanate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну первая ошибка давится On Error resume next, создаётся объект Err, если его не вычистил (Err.Clear либо другим On Error), то следующая ошибка уже не давится.

Поэтому чтото такое вот, если нужно задавить сразу несколько критических действий:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
On error resume next
первая потенциально-ошибочная команда
Err.Clear
вторая потенциально-ошибочная команда
Err.Clear
...
последняя потенциально-ошибочная команда
On error goto 0
...
Рейтинг: 0 / 0
VBA - Извлечение контактов Outlook
    #39842000
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldfanateну первая ошибка давится On Error resume next, создаётся объект Err, если его не вычистил (Err.Clear либо другим On Error), то следующая ошибка уже не давится .
Я выше пример накатал, который это (выделил) опровергает
...
Рейтинг: 0 / 0
VBA - Извлечение контактов Outlook
    #39842044
ldfanate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / VBA - Извлечение контактов Outlook
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]