2016-09-07 77 views
1

我在這裏有一個VBA代碼,用於將所選子文件夾的電子郵件地址導出到Excel文件。我的問題是,它只適用於我的文件夾中的一個。VBA MACRO - 將電子郵件地址導出到Excel

當我嘗試將此宏用於其他文件夾時,出現「運行時錯誤13 TYPE MISMATCH」錯誤。我真的不知道爲什麼我得到這個錯誤。我希望有人能夠幫助我發現問題的來源。

這裏是我的代碼:

Sub ExportToExcel() 


Dim appExcel As Excel.Application 
Dim wkb As Excel.Workbook 
Dim wks As Excel.Worksheet 
Dim rng As Excel.Range 
Dim strSheet As String 
Dim strPath As String 
Dim intRowCounter As Integer 
Dim intColumnCounter As Integer 
Dim msg As Outlook.MailItem 
Dim nms As Outlook.NameSpace 
Dim fld As Outlook.MAPIFolder 
Dim itm As Object 
strSheet = "OutlookItems.xlsx" 
strPath = "C:\Users\Gabriel.Alejandro\Desktop\" 
strSheet = strPath & strSheet 


Debug.Print strSheet 
    'Select export folder 
Set nms = Application.GetNamespace("MAPI") 
Set fld = nms.PickFolder 
    'Handle potential errors with Select Folder dialog box. 


    'Open and activate Excel workbook. 
Set appExcel = CreateObject("Excel.Application") 
appExcel.Workbooks.Open (strSheet) 


Set wkb = appExcel.ActiveWorkbook 
Set wks = wkb.Sheets(1) 
wks.Activate 


appExcel.Application.Visible = True 

    'Copy field items in mail folder. 
For Each itm In fld.Items 
intColumnCounter = 1 

Set msg = itm 'The part where I am getting the ERROR 

intRowCounter = intRowCounter + 1 
Set rng = wks.Cells(intRowCounter, intColumnCounter) 
rng.Value = msg.To 
intColumnCounter = intColumnCounter + 1 
Set rng = wks.Cells(intRowCounter, intColumnCounter) 
rng.Value = msg.SenderEmailAddress 


Next itm 

Set appExcel = Nothing 
Set wkb = Nothing 
Set wks = Nothing 
Set rng = Nothing 
Set msg = Nothing 
Set nms = Nothing 
Set fld = Nothing 
Set itm = Nothing 

Exit Sub 

Set appExcel = Nothing 
Set wkb = Nothing 
Set wks = Nothing 
Set rng = Nothing 
Set msg = Nothing 
Set nms = Nothing 
Set fld = Nothing 
Set itm = Nothing 


End Sub 
+0

您定位的是哪個版本的Outlook/Office? [Outlook.Folder和Outlok.MAPIFolder之間的區別](http://stackoverflow.com/a/12353494/205233)似乎表示不推薦使用「Outlook.Namespace」和「Outlook.MAPIFolder」。 – Filburt

+0

我正在嘗試導出到Office 2013.此代碼適用於Outlook中的其中一個子文件夾,但不適用於其他文件夾 – alejandraux

+0

命名空間和MAPIFolder僅用於選擇要導出的文件夾。我不認爲這是問題 – alejandraux

回答

0

您將承擔所有的ITM是的MailItem。

,如果它不是你的MailItem可以跳過一個項目:

For Each itm In fld.items 

    intColumnCounter = 1 

    If itm.Class = olMail Then 

     Set msg = itm 

     intRowCounter = intRowCounter + 1 
     Set rng = wks.Cells(intRowCounter, intColumnCounter) 
     rng.Value = msg.To 

     intColumnCounter = intColumnCounter + 1 
     Set rng = wks.Cells(intRowCounter, intColumnCounter) 
     rng.Value = msg.senderemailaddress 

    Else 

     Debug.Print " Item is not a mailitem." 

    End If 

Next itm 

你可以代替旁路出錯,如果該項目不具備你想要的屬性。

For Each itm In fld.items 

    intColumnCounter = 1 

    intRowCounter = intRowCounter + 1 
    Set rng = wks.Cells(intRowCounter, intColumnCounter) 
    On Error Resume Next 
    rng.Value = itm.To 
    On Error GoTo 0 

    intColumnCounter = intColumnCounter + 1 
    Set rng = wks.Cells(intRowCounter, intColumnCounter) 
    On Error Resume Next 
    rng.Value = itm.senderemailaddress 
    On Error GoTo 0 

Next itm 
+0

我會嘗試這一個,如果它有效,給你一個更新。這次真是萬分感謝 。 – alejandraux

相關問題