+ Reply to Thread
Results 1 to 5 of 5

Importing GAL

  1. #1

    Importing GAL

    Below is the code to extract the GAL into excel. The question I have
    is how can I use this code to filter by country, i.e. "US". Thanks.

    Code was written by brettdj and can be found here
    http://www.vbaexpress.com/kb/getarticle.php?kb_id=222

    Option Explicit
    Const CdoAddressListGAL = 0
    Const CdoUser = 0
    Const CdoRemoteUser = 6
    #Const EarlyBind = True

    Sub GetGAL()
    'Requires Excel 2000 as it uses Array

    Dim X As Variant, CDOList As Variant, TitleList As Variant, CDOitem
    As Variant
    Dim NumX As Long, ArrayDump As Long, i As Long, v As Long, u As
    Long

    'Change the #Const to True to enable Early Binding

    #If EarlyBind Then
    Dim objSession As MAPI.Session, oFolder As MAPI.AddressList,
    oMessage As MAPI.AddressEntry
    Set objSession = New MAPI.Session
    CDOList = Array(CdoPR_DISPLAY_NAME, CdoPR_GIVEN_NAME,
    CdoPR_SURNAME, 972947486, CdoPR_ACCOUNT, _
    CdoPR_TITLE, CdoPR_OFFICE_TELEPHONE_NUMBER,
    CdoPR_MOBILE_TELEPHONE_NUMBER, CdoPR_PRIMARY_FAX_NUMBER, _
    CdoPR_COMPANY_NAME, CdoPR_DEPARTMENT_NAME, 974716958,
    CdoPR_STREET_ADDRESS, _
    CdoPR_LOCALITY, CdoPR_STATE_OR_PROVINCE, CdoPR_COUNTRY, _
    CdoPR_ASSISTANT, CdoPR_ASSISTANT_TELEPHONE_NUMBER)
    #Else
    Dim objSession As Object, oFolder As Object, oMessage As Object
    Set objSession = CreateObject("MAPI.Session")
    CDOList = Array(805371934, 973471774, 974192670, 972947486,
    973078558, 974585886, _
    973602846, 974913566, 975372318, 974520350, 974651422,
    974716958, 975765534, _
    975634462, 975699998, 975568926, 976224286, 976093214)
    #End If

    With objSession
    .Logon , , True, True
    Set oFolder = .GetAddressList(CdoAddressListGAL)
    End With

    TitleList = Array("GAL Name", "Given Name", "Surname", "Email
    address", "Logon", "Title Field", _
    "Telephone", "Mobile", "Fax", "CSG/Group", "Department",
    "Site", "Address", "Location", "State ", _
    "Country Field", "Assistant Name", "Assistant Phone")

    'Grab 2000 records in one hit before writing to sheet

    ArrayDump = 2000
    Cells.Clear

    'Add Titles
    With Range("A1").Resize(1, UBound(TitleList) + 1)
    .Formula = TitleList
    .HorizontalAlignment = xlCenter
    .Interior.ColorIndex = 35
    .Font.Bold = True
    .Font.Size = 12
    End With

    ReDim X(1 To ArrayDump, 1 To UBound(CDOList) + 1)

    On Error Resume Next
    'Some fields may not exist

    'Turn off screen updating
    Application.ScreenUpdating = False
    For Each oMessage In oFolder.AddressEntries

    Select Case oMessage.DisplayType
    Case CdoUser, CdoRemoteUser
    i = i + 1
    'Reset variant array every after each group of records
    If i Mod (ArrayDump + 1) = 0 Then

    'Check that records do notexceed one sheet
    If NumX * ArrayDump + i > 65535 Then
    MsgBox "GAL exceeds 65535 entries - extraction
    stopped ", vbCritical + vbOKOnly
    GoTo FastExit
    End If

    'Dump data
    NumX = NumX + 1
    Range("A2").Offset((NumX - 1) * ArrayDump,
    0).Resize(ArrayDump, UBound(CDOList) + 1) = X
    ReDim X(1 To ArrayDump, 1 To UBound(CDOList) + 1)

    i = 1
    End If
    'Display status to user
    If i Mod ArrayDump = 0 Then
    Application.StatusBar = "Entry " & i + u + NumX *
    ArrayDump & " of " & oFolder.AddressEntries.Count
    DoEvents
    End If

    v = 0
    ' Add detail to each address
    For Each CDOitem In CDOList
    v = v + 1
    X(i, v) = oMessage.Fields(CDOitem)
    Next
    Case Else
    u = u + 1
    End Select
    Next

    'dump remaining entries
    Range("A2").Offset(NumX * ArrayDump, 0).Resize(ArrayDump,
    UBound(CDOList) + 1) = X

    'cleanup
    FastExit:
    ActiveSheet.UsedRange.EntireRow.WrapText = False
    Cells.EntireColumn.AutoFit

    Application.StatusBar = ""
    Application.ScreenUpdating = True

    Set oFolder = Nothing
    Set objSession = Nothing

    End Sub


  2. #2
    Bob Phillips
    Guest

    Re: Importing GAL

    Surely, it dumps the data into an excel spreadsheet, so you then just use
    Excel's built-in filter on the location column.

    --
    HTH

    Bob Phillips

    "[email protected]" <[email protected]> wrote in
    message news:[email protected]...
    > Below is the code to extract the GAL into excel. The question I have
    > is how can I use this code to filter by country, i.e. "US". Thanks.
    >
    > Code was written by brettdj and can be found here
    > http://www.vbaexpress.com/kb/getarticle.php?kb_id=222
    >
    > Option Explicit
    > Const CdoAddressListGAL = 0
    > Const CdoUser = 0
    > Const CdoRemoteUser = 6
    > #Const EarlyBind = True
    >
    > Sub GetGAL()
    > 'Requires Excel 2000 as it uses Array
    >
    > Dim X As Variant, CDOList As Variant, TitleList As Variant, CDOitem
    > As Variant
    > Dim NumX As Long, ArrayDump As Long, i As Long, v As Long, u As
    > Long
    >
    > 'Change the #Const to True to enable Early Binding
    >
    > #If EarlyBind Then
    > Dim objSession As MAPI.Session, oFolder As MAPI.AddressList,
    > oMessage As MAPI.AddressEntry
    > Set objSession = New MAPI.Session
    > CDOList = Array(CdoPR_DISPLAY_NAME, CdoPR_GIVEN_NAME,
    > CdoPR_SURNAME, 972947486, CdoPR_ACCOUNT, _
    > CdoPR_TITLE, CdoPR_OFFICE_TELEPHONE_NUMBER,
    > CdoPR_MOBILE_TELEPHONE_NUMBER, CdoPR_PRIMARY_FAX_NUMBER, _
    > CdoPR_COMPANY_NAME, CdoPR_DEPARTMENT_NAME, 974716958,
    > CdoPR_STREET_ADDRESS, _
    > CdoPR_LOCALITY, CdoPR_STATE_OR_PROVINCE, CdoPR_COUNTRY, _
    > CdoPR_ASSISTANT, CdoPR_ASSISTANT_TELEPHONE_NUMBER)
    > #Else
    > Dim objSession As Object, oFolder As Object, oMessage As Object
    > Set objSession = CreateObject("MAPI.Session")
    > CDOList = Array(805371934, 973471774, 974192670, 972947486,
    > 973078558, 974585886, _
    > 973602846, 974913566, 975372318, 974520350, 974651422,
    > 974716958, 975765534, _
    > 975634462, 975699998, 975568926, 976224286, 976093214)
    > #End If
    >
    > With objSession
    > .Logon , , True, True
    > Set oFolder = .GetAddressList(CdoAddressListGAL)
    > End With
    >
    > TitleList = Array("GAL Name", "Given Name", "Surname", "Email
    > address", "Logon", "Title Field", _
    > "Telephone", "Mobile", "Fax", "CSG/Group", "Department",
    > "Site", "Address", "Location", "State ", _
    > "Country Field", "Assistant Name", "Assistant Phone")
    >
    > 'Grab 2000 records in one hit before writing to sheet
    >
    > ArrayDump = 2000
    > Cells.Clear
    >
    > 'Add Titles
    > With Range("A1").Resize(1, UBound(TitleList) + 1)
    > .Formula = TitleList
    > .HorizontalAlignment = xlCenter
    > .Interior.ColorIndex = 35
    > .Font.Bold = True
    > .Font.Size = 12
    > End With
    >
    > ReDim X(1 To ArrayDump, 1 To UBound(CDOList) + 1)
    >
    > On Error Resume Next
    > 'Some fields may not exist
    >
    > 'Turn off screen updating
    > Application.ScreenUpdating = False
    > For Each oMessage In oFolder.AddressEntries
    >
    > Select Case oMessage.DisplayType
    > Case CdoUser, CdoRemoteUser
    > i = i + 1
    > 'Reset variant array every after each group of records
    > If i Mod (ArrayDump + 1) = 0 Then
    >
    > 'Check that records do notexceed one sheet
    > If NumX * ArrayDump + i > 65535 Then
    > MsgBox "GAL exceeds 65535 entries - extraction
    > stopped ", vbCritical + vbOKOnly
    > GoTo FastExit
    > End If
    >
    > 'Dump data
    > NumX = NumX + 1
    > Range("A2").Offset((NumX - 1) * ArrayDump,
    > 0).Resize(ArrayDump, UBound(CDOList) + 1) = X
    > ReDim X(1 To ArrayDump, 1 To UBound(CDOList) + 1)
    >
    > i = 1
    > End If
    > 'Display status to user
    > If i Mod ArrayDump = 0 Then
    > Application.StatusBar = "Entry " & i + u + NumX *
    > ArrayDump & " of " & oFolder.AddressEntries.Count
    > DoEvents
    > End If
    >
    > v = 0
    > ' Add detail to each address
    > For Each CDOitem In CDOList
    > v = v + 1
    > X(i, v) = oMessage.Fields(CDOitem)
    > Next
    > Case Else
    > u = u + 1
    > End Select
    > Next
    >
    > 'dump remaining entries
    > Range("A2").Offset(NumX * ArrayDump, 0).Resize(ArrayDump,
    > UBound(CDOList) + 1) = X
    >
    > 'cleanup
    > FastExit:
    > ActiveSheet.UsedRange.EntireRow.WrapText = False
    > Cells.EntireColumn.AutoFit
    >
    > Application.StatusBar = ""
    > Application.ScreenUpdating = True
    >
    > Set oFolder = Nothing
    > Set objSession = Nothing
    >
    > End Sub
    >




  3. #3
    PraetorianPrefect
    Guest

    Re: Importing GAL


    ========

    It dumps the entire GAL, which would exceed the limit in excel.

    Thank you.

    ========

    Bob Phillips Wrote:
    > Surely, it dumps the data into an excel spreadsheet, so you then just
    > use
    > Excel's built-in filter on the location column.
    >
    > --
    > HTH
    >
    > Bob Phillips
    >
    >
    >
    > "[email protected]" [email protected] wrote
    > in
    > message news:[email protected]
    > Below is the code to extract the GAL into excel. The question I have
    > is how can I use this code to filter by country, i.e. "US". Thanks.
    >
    > Code was written by brettdj and can be found here
    > http://www.vbaexpress.com/kb/getarticle.php?kb_id=222
    >
    > Option Explicit
    > Const CdoAddressListGAL = 0
    > Const CdoUser = 0
    > Const CdoRemoteUser = 6
    > #Const EarlyBind = True
    >
    > Sub GetGAL()
    > 'Requires Excel 2000 as it uses Array
    >
    > Dim X As Variant, CDOList As Variant, TitleList As Variant,
    > CDOitem
    > As Variant
    > Dim NumX As Long, ArrayDump As Long, i As Long, v As Long, u As
    > Long
    >
    > 'Change the #Const to True to enable Early Binding
    >
    > #If EarlyBind Then
    > Dim objSession As MAPI.Session, oFolder As MAPI.AddressList,
    > oMessage As MAPI.AddressEntry
    > Set objSession = New MAPI.Session
    > CDOList = Array(CdoPR_DISPLAY_NAME, CdoPR_GIVEN_NAME,
    > CdoPR_SURNAME, 972947486, CdoPR_ACCOUNT, _
    > CdoPR_TITLE, CdoPR_OFFICE_TELEPHONE_NUMBER,
    > CdoPR_MOBILE_TELEPHONE_NUMBER, CdoPR_PRIMARY_FAX_NUMBER, _
    > CdoPR_COMPANY_NAME, CdoPR_DEPARTMENT_NAME, 974716958,
    > CdoPR_STREET_ADDRESS, _
    > CdoPR_LOCALITY, CdoPR_STATE_OR_PROVINCE, CdoPR_COUNTRY, _
    > CdoPR_ASSISTANT, CdoPR_ASSISTANT_TELEPHONE_NUMBER)
    > #Else
    > Dim objSession As Object, oFolder As Object, oMessage As
    > Object
    > Set objSession = CreateObject("MAPI.Session")
    > CDOList = Array(805371934, 973471774, 974192670, 972947486,
    > 973078558, 974585886, _
    > 973602846, 974913566, 975372318, 974520350, 974651422,
    > 974716958, 975765534, _
    > 975634462, 975699998, 975568926, 976224286, 976093214)
    > #End If
    >
    > With objSession
    > .Logon , , True, True
    > Set oFolder = .GetAddressList(CdoAddressListGAL)
    > End With
    >
    > TitleList = Array("GAL Name", "Given Name", "Surname", "Email
    > address", "Logon", "Title Field", _
    > "Telephone", "Mobile", "Fax", "CSG/Group", "Department",
    > "Site", "Address", "Location", "State ", _
    > "Country Field", "Assistant Name", "Assistant Phone")
    >
    > 'Grab 2000 records in one hit before writing to sheet
    >
    > ArrayDump = 2000
    > Cells.Clear
    >
    > 'Add Titles
    > With Range("A1").Resize(1, UBound(TitleList) + 1)
    > .Formula = TitleList
    > .HorizontalAlignment = xlCenter
    > .Interior.ColorIndex = 35
    > .Font.Bold = True
    > .Font.Size = 12
    > End With
    >
    > ReDim X(1 To ArrayDump, 1 To UBound(CDOList) + 1)
    >
    > On Error Resume Next
    > 'Some fields may not exist
    >
    > 'Turn off screen updating
    > Application.ScreenUpdating = False
    > For Each oMessage In oFolder.AddressEntries
    >
    > Select Case oMessage.DisplayType
    > Case CdoUser, CdoRemoteUser
    > i = i + 1
    > 'Reset variant array every after each group of
    > records
    > If i Mod (ArrayDump + 1) = 0 Then
    >
    > 'Check that records do notexceed one sheet
    > If NumX * ArrayDump + i 65535 Then
    > MsgBox "GAL exceeds 65535 entries -
    > extraction
    > stopped ", vbCritical + vbOKOnly
    > GoTo FastExit
    > End If
    >
    > 'Dump data
    > NumX = NumX + 1
    > Range("A2").Offset((NumX - 1) * ArrayDump,
    > 0).Resize(ArrayDump, UBound(CDOList) + 1) = X
    > ReDim X(1 To ArrayDump, 1 To UBound(CDOList) + 1)
    >
    > i = 1
    > End If
    > 'Display status to user
    > If i Mod ArrayDump = 0 Then
    > Application.StatusBar = "Entry " & i + u + NumX *
    > ArrayDump & " of " & oFolder.AddressEntries.Count
    > DoEvents
    > End If
    >
    > v = 0
    > ' Add detail to each address
    > For Each CDOitem In CDOList
    > v = v + 1
    > X(i, v) = oMessage.Fields(CDOitem)
    > Next
    > Case Else
    > u = u + 1
    > End Select
    > Next
    >
    > 'dump remaining entries
    > Range("A2").Offset(NumX * ArrayDump, 0).Resize(ArrayDump,
    > UBound(CDOList) + 1) = X
    >
    > 'cleanup
    > FastExit:
    > ActiveSheet.UsedRange.EntireRow.WrapText = False
    > Cells.EntireColumn.AutoFit
    >
    > Application.StatusBar = ""
    > Application.ScreenUpdating = True
    >
    > Set oFolder = Nothing
    > Set objSession = Nothing
    >
    > End Sub
    > -



    --
    PraetorianPrefect

  4. #4
    PraetorianPrefect
    Guest

    Re: Importing GAL


    The limit is set to 2000 which is but a small portion of the GAL.
    Instead of limiting it to 2000 entries, I would like to extract "US" as
    the country.

    Again, Thank you.


    Bob Phillips Wrote:
    > Surely, it dumps the data into an excel spreadsheet, so you then just
    > use
    > Excel's built-in filter on the location column.
    >
    > --
    > HTH
    >
    > Bob Phillips
    >
    > "[email protected]" [email protected] wrote
    > in
    > message news:[email protected]
    > Below is the code to extract the GAL into excel. The question I have
    > is how can I use this code to filter by country, i.e. "US". Thanks.
    >
    > Code was written by brettdj and can be found here
    > http://www.vbaexpress.com/kb/getarticle.php?kb_id=222
    >
    > Option Explicit
    > Const CdoAddressListGAL = 0
    > Const CdoUser = 0
    > Const CdoRemoteUser = 6
    > #Const EarlyBind = True
    >
    > Sub GetGAL()
    > 'Requires Excel 2000 as it uses Array
    >
    > Dim X As Variant, CDOList As Variant, TitleList As Variant,
    > CDOitem
    > As Variant
    > Dim NumX As Long, ArrayDump As Long, i As Long, v As Long, u As
    > Long
    >
    > 'Change the #Const to True to enable Early Binding
    >
    > #If EarlyBind Then
    > Dim objSession As MAPI.Session, oFolder As MAPI.AddressList,
    > oMessage As MAPI.AddressEntry
    > Set objSession = New MAPI.Session
    > CDOList = Array(CdoPR_DISPLAY_NAME, CdoPR_GIVEN_NAME,
    > CdoPR_SURNAME, 972947486, CdoPR_ACCOUNT, _
    > CdoPR_TITLE, CdoPR_OFFICE_TELEPHONE_NUMBER,
    > CdoPR_MOBILE_TELEPHONE_NUMBER, CdoPR_PRIMARY_FAX_NUMBER, _
    > CdoPR_COMPANY_NAME, CdoPR_DEPARTMENT_NAME, 974716958,
    > CdoPR_STREET_ADDRESS, _
    > CdoPR_LOCALITY, CdoPR_STATE_OR_PROVINCE, CdoPR_COUNTRY, _
    > CdoPR_ASSISTANT, CdoPR_ASSISTANT_TELEPHONE_NUMBER)
    > #Else
    > Dim objSession As Object, oFolder As Object, oMessage As
    > Object
    > Set objSession = CreateObject("MAPI.Session")
    > CDOList = Array(805371934, 973471774, 974192670, 972947486,
    > 973078558, 974585886, _
    > 973602846, 974913566, 975372318, 974520350, 974651422,
    > 974716958, 975765534, _
    > 975634462, 975699998, 975568926, 976224286, 976093214)
    > #End If
    >
    > With objSession
    > .Logon , , True, True
    > Set oFolder = .GetAddressList(CdoAddressListGAL)
    > End With
    >
    > TitleList = Array("GAL Name", "Given Name", "Surname", "Email
    > address", "Logon", "Title Field", _
    > "Telephone", "Mobile", "Fax", "CSG/Group", "Department",
    > "Site", "Address", "Location", "State ", _
    > "Country Field", "Assistant Name", "Assistant Phone")
    >
    > 'Grab 2000 records in one hit before writing to sheet
    >
    > ArrayDump = 2000
    > Cells.Clear
    >
    > 'Add Titles
    > With Range("A1").Resize(1, UBound(TitleList) + 1)
    > .Formula = TitleList
    > .HorizontalAlignment = xlCenter
    > .Interior.ColorIndex = 35
    > .Font.Bold = True
    > .Font.Size = 12
    > End With
    >
    > ReDim X(1 To ArrayDump, 1 To UBound(CDOList) + 1)
    >
    > On Error Resume Next
    > 'Some fields may not exist
    >
    > 'Turn off screen updating
    > Application.ScreenUpdating = False
    > For Each oMessage In oFolder.AddressEntries
    >
    > Select Case oMessage.DisplayType
    > Case CdoUser, CdoRemoteUser
    > i = i + 1
    > 'Reset variant array every after each group of
    > records
    > If i Mod (ArrayDump + 1) = 0 Then
    >
    > 'Check that records do notexceed one sheet
    > If NumX * ArrayDump + i 65535 Then
    > MsgBox "GAL exceeds 65535 entries -
    > extraction
    > stopped ", vbCritical + vbOKOnly
    > GoTo FastExit
    > End If
    >
    > 'Dump data
    > NumX = NumX + 1
    > Range("A2").Offset((NumX - 1) * ArrayDump,
    > 0).Resize(ArrayDump, UBound(CDOList) + 1) = X
    > ReDim X(1 To ArrayDump, 1 To UBound(CDOList) + 1)
    >
    > i = 1
    > End If
    > 'Display status to user
    > If i Mod ArrayDump = 0 Then
    > Application.StatusBar = "Entry " & i + u + NumX *
    > ArrayDump & " of " & oFolder.AddressEntries.Count
    > DoEvents
    > End If
    >
    > v = 0
    > ' Add detail to each address
    > For Each CDOitem In CDOList
    > v = v + 1
    > X(i, v) = oMessage.Fields(CDOitem)
    > Next
    > Case Else
    > u = u + 1
    > End Select
    > Next
    >
    > 'dump remaining entries
    > Range("A2").Offset(NumX * ArrayDump, 0).Resize(ArrayDump,
    > UBound(CDOList) + 1) = X
    >
    > 'cleanup
    > FastExit:
    > ActiveSheet.UsedRange.EntireRow.WrapText = False
    > Cells.EntireColumn.AutoFit
    >
    > Application.StatusBar = ""
    > Application.ScreenUpdating = True
    >
    > Set oFolder = Nothing
    > Set objSession = Nothing
    >
    > End Sub
    > -



    --
    PraetorianPrefect

  5. #5
    Registered User
    Join Date
    12-15-2003
    Posts
    9
    Hi PraetorianPrefect, Bob

    The code will handle up to 65535 entries, ie a whole worksheet. It handles 40,000 addresses or so for my company.

    The 2000 reference in the code is a message for the code to dump the variant array in 2000 record chunks.

    As Bob suggested you can filter the records by location

    Cheers

    Dave

+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Search Engine Friendly URLs by vBSEO 3.6.0 RC 1