Excel로 Outlook의 글로벌 커뮤니케이션 내보내기

최근 하드디스크 파일을 정리한 결과 아웃룩의 전 세계 통신에 엑셀이 녹음된 코드를 발견했지만 이 파일이 언제 내려왔는지 원작자에게 경의를 표합니다.
주의: 1. 이 코드는 Excel 모듈에 쓰여 있습니다.2. 연락처에 연락처가 많으면 시간이 좀 걸릴 수 있다.
 

  
  
  
  
  1. Const CdoAddressListGAL = 0 
  2. Const CdoUser = 0 
  3. Const CdoRemoteUser = 6 
  4. #Const EarlyBind = True 
  5.  
  6. Sub Approach() 
  7. 'Requires Excel 2000 as it uses Array 
  8.  
  9. 'A reference must be set to the CDO 1.21 Library for Early Binding 
  10. 'The file is cdo.dll 
  11.  
  12.     Dim X As Variant, CDOList As Variant, TitleList As Variant, CDOitem As Variant 
  13.     Dim NumX As Long, ArrayDump As Long, i As Long, v As Long, u As Long 
  14.  
  15.     Range("a1:R1").Value2 = Array("Global 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"
  16.  
  17.     #If EarlyBind Then 
  18.         Dim objSession As MAPI.Session, oFolder As MAPI.AddressList, oMessage As MAPI.AddressEntry 
  19.         Set objSession = New MAPI.Session 
  20.         CDOList = Array(CdoPR_DISPLAY_NAME, CdoPR_GIVEN_NAME, CdoPR_SURNAME, 972947486, CdoPR_ACCOUNT, _ 
  21.                         CdoPR_TITLE, CdoPR_OFFICE_TELEPHONE_NUMBER, CdoPR_MOBILE_TELEPHONE_NUMBER, CdoPR_PRIMARY_FAX_NUMBER, _ 
  22.                         CdoPR_COMPANY_NAME, CdoPR_DEPARTMENT_NAME, 974716958, CdoPR_STREET_ADDRESS, _ 
  23.                         CdoPR_LOCALITY, CdoPR_STATE_OR_PROVINCE, CdoPR_COUNTRY, _ 
  24.                         CdoPR_ASSISTANT, CdoPR_ASSISTANT_TELEPHONE_NUMBER) 
  25.     #Else 
  26.         Dim objSession As Object, oFolder As Object, oMessage As Object 
  27.         Set objSession = CreateObject("MAPI.Session"
  28.         CDOList = Array(805371934, 973471774, 974192670, 972947486, 973078558, 974585886, _ 
  29.                         973602846, 974913566, 975372318, 974520350, 974651422, 974716958, 975765534, _ 
  30.                         975634462, 975699998, 975568926, 976224286, 976093214) 
  31.     #End If 
  32.  
  33.     With objSession 
  34.         .Logon , , FalseFalse 
  35.         Set oFolder = .GetAddressList(CdoAddressListGAL) 
  36.     End With 
  37.  
  38.     TitleList = Array("GAL Name""Given Name""Surname""Email address""Logon""Title Field", _ 
  39.                       "Telephone""Mobile""Fax""CSG/Group""Department""Site""Address""Location""State ", _ 
  40.                       "Country Field""Assistant Name""Assistant Phone"
  41.  
  42.     'Grab 10 records in one hit before writing to sheet 
  43.     '2000 would be better but Excel skips records 
  44.  
  45.     ArrayDump = 10 
  46.     Cells.Clear 
  47.  
  48.     'Add Titles 
  49.     With Range("A1").Resize(1, UBound(TitleList) + 1) 
  50.         .Formula = TitleList 
  51.         .HorizontalAlignment = xlCenter 
  52.         .Interior.ColorIndex = 35 
  53.         .Font.Bold = True 
  54.         .Font.Size = 12 
  55.     End With 
  56.  
  57.     UserForm1.Show vbModeless 
  58.  
  59.     ReDim X(1 To ArrayDump, 1 To UBound(CDOList) + 1) 
  60.  
  61.     On Error Resume Next 
  62.     'Some fields may not exist 
  63.     Application.ScreenUpdating = False 
  64.     For Each oMessage In oFolder.AddressEntries 
  65.  
  66.         Select Case oMessage.DisplayType 
  67.         Case CdoUser, CdoRemoteUser 
  68.             i = i + 1 
  69.             'Reset variant array every after each group of records 
  70.             If i Mod (ArrayDump + 1) = 0 Then 
  71.                 If NumX * ArrayDump + i > 65535 Then 
  72.                     MsgBox "GAL exceeds 65535 entries - extraction stopped ", vbCritical + vbOKOnly 
  73.                     GoTo FastExit 
  74.                 End If 
  75.                 NumX = NumX + 1 
  76.                 Range("A2").Offset((NumX - 1) * ArrayDump, 0).Resize(ArrayDump, UBound(CDOList) + 1) = X 
  77.                 ReDim X(1 To ArrayDump, 1 To UBound(CDOList) + 1) 
  78.                 i = 1 
  79.             End If 
  80.             'Display status to user 
  81.             If i Mod ArrayDump = 0 Then 
  82.                 UserForm1.LabelProgress.Width = (i + u + NumX * ArrayDump) / oFolder.AddressEntries.Count * UserForm1.FrameProgress.Width 
  83.                 UserForm1.LabelSheetNum = Format((i + u + NumX * ArrayDump) / oFolder.AddressEntries.Count, "percent"
  84.                 DoEvents 
  85.             End If 
  86.  
  87.             v = 0 
  88.             ' Add detail to each address 
  89.             For Each CDOitem In CDOList 
  90.                 v = v + 1 
  91.                 X(i, v) = oMessage.Fields(CDOitem) 
  92.             Next 
  93.         Case Else 
  94.             u = u + 1 
  95.         End Select 
  96.     Next 
  97.  
  98.     'dump remaining entries 
  99.     Range("A2").Offset(NumX * ArrayDump, 0).Resize(ArrayDump, UBound(CDOList) + 1) = X 
  100.  
  101.     'cleanup 
  102. FastExit: 
  103.     Unload UserForm1 
  104.     ActiveSheet.UsedRange.EntireRow.WrapText = False 
  105.     ActiveSheet.UsedRange.AutoFilter 
  106.     Columns("A:R").AutoFit 
  107.  
  108.     Application.ScreenUpdating = True 
  109.  
  110.     Set oFolder = Nothing 
  111.     Set objSession = Nothing 
  112.  
  113. End Sub 

 
 
 
 
저자: laoyebin(Paladin.lao) 출처:http://www.cnblogs.com/laoyebin/개인 사이트 영문 출처:http://mrvsto.com/개인 사이트 중국어 출처:http://cn.mrvsto.com/

좋은 웹페이지 즐겨찾기