2016-11-22 9 views
0

私は次のコードに取り組んでいますが、Outlookの2つの異なるフォルダから電子メールを追加しようとしていますが、機能しないために何かが間違っています。何が起こるかは、 "Apex"フォルダではなく "PolicyCenter"フォルダからすべての電子メールを取得するコードを実行するときです。私は何が間違っているのか分かりませんし、何か助けやアドバイスをいただければ幸いです!Outlookフォルダから電子メールをExcelにエクスポートする。コーディングの問題

Option Explicit 
Sub VBA_Export_Outlook_Emails_To_Excel() 
Dim Folder As Outlook.MAPIFolder 
Dim sFolders As Outlook.MAPIFolder 
Dim iRow As Integer, oRow As Integer 
Dim MailBoxName As String, Pst_Folder_Name As String 

MailBoxName = "Mailbox, PL-SYSTEM-OUTAGES" 

Pst_Folder_Name = "Apex" 
Pst_Folder_Name = "PolicyCenter" 

    For Each Folder In Outlook.Session.Folders(MailBoxName).Folders 
    If VBA.UCase(Folder.Name) = VBA.UCase(Pst_Folder_Name) Then GoTo Label_Folder_Found 
    For Each sFolders In Folder.Folders 
     If VBA.UCase(sFolders.Name) = VBA.UCase(Pst_Folder_Name) Then 
      Set Folder = sFolders 
      GoTo Label_Folder_Found 
     End If 
    Next sFolders 
Next Folder 

Label_Folder_Found: 
If Folder.Name = "" Then 
    MsgBox "Invalid Data in Input" 
    GoTo End_Lbl1: 
End If 

ThisWorkbook.Sheets(1).Activate 
Folder.Items.Sort "Received" 

ThisWorkbook.Sheets(1).Cells(1, 1) = "Sender" 
ThisWorkbook.Sheets(1).Cells(1, 2) = "Subject" 
ThisWorkbook.Sheets(1).Cells(1, 3) = "Date" 
ThisWorkbook.Sheets(1).Cells(1, 4) = "Size" 
'ThisWorkbook.Sheets(1).Cells(1, 5) = "EmailID" 
'ThisWorkbook.Sheets(1).Cells(1, 6) = "Body" 

oRow = 1 
For iRow = 1 To Folder.Items.Count 

    If VBA.DateValue(VBA.Now) - VBA.DateValue(Folder.Items.Item(iRow).ReceivedTime) <= 60 Then 
     oRow = oRow + 1 
     ThisWorkbook.Sheets(1).Cells(oRow, 1).Select 
     ThisWorkbook.Sheets(1).Cells(oRow, 1) = Folder.Items.Item(iRow).SenderName 
     ThisWorkbook.Sheets(1).Cells(oRow, 2) = Folder.Items.Item(iRow).Subject 
     ThisWorkbook.Sheets(1).Cells(oRow, 3) = Folder.Items.Item(iRow).ReceivedTime 
     ThisWorkbook.Sheets(1).Cells(oRow, 4) = Folder.Items.Item(iRow).Size 
     'ThisWorkbook.Sheets(1).Cells(oRow, 5) = Folder.Items.Item(iRow).SenderEmailAddress 
     'ThisWorkbook.Sheets(1).Cells(oRow, 6) = Folder.Items.Item(iRow).Body 
    End If 
Next iRow 
MsgBox "Outlook Mails Extracted to Excel" 
Set Folder = Nothing 
Set sFolders = Nothing 

End_Lbl1: 
End Sub 

ありがとう!! -D

+0

...私が何を意味するのかを示すためにこれをしなかった '' Pst_Folder_Nameは= "PolicyCenter" でそれを上書きします。だからコードは決して "Apex"のために動かない。 – xidgel

+0

それでは、両方のフォルダの内容をコピーするようにする方法はありますか?私はそれを理解するいくつかの問題があります。 – Deke

+0

は、次の2つのステートメントの間に「新しいフォルダ名」を入れますか?次のsFolders Pst_Folder_Name = "PolicyCenter"次のフォルダ –

答えて

0

次の2つのステートメントの間に「新しいフォルダ名」を入れますか?

Next sFolders 
Pst_Folder_Name = "PolicyCenter" 
Next Folder 

は、あなたが `、コードの次の行でPst_Folder_Name = "アペックスを"`設定

+0

これは、次の 'Pst_Folder_Name =" Apex "に追加することを意味します。Outlook.Session.Folders(MailBoxName)の各フォルダFor。VBA.UCase(Folder.Name)= VBA.UCase(Pst_Folder_Name)の場合GoTo Label_Folder_Found For Each (sFolders.Name)= VBA.UCase(Pst_Folder_Name)Then Set Folder = sFolders GoTo Label_Folder_Found End If次のsFolders次のフォルダPst_Folder_Name = "PolicyCenter"次のフォルダsFolders次のフォルダ 'これを正しく表示するには)しかし、ここに入れてもうまくいかないようです。それでも、1つのフォルダの電子メールのみをインポートします – Deke

+0

次のsFoldersの後、次のフォルダの前に意味します –

+0

それも試しました。うまくいかないようです。私が何をしていても、複数のフォルダからこれを引き出す方法を理解できないようです。他のアイデア???私は最後の2日間私が思うことができるすべてを試していました(私が知っているもので制限されています)。私の目は私の頭の中から落ちるだろう。私はちょうど複数のメールボックスからすべての電子メールを引っ張ったり、既存のすべてのモジュールを実行したり(それぞれの設定を1つの特定のボックスから電子メールを引き出す)、お互いに上書きすることなく次の利用可能な行にシートに入力する必要があります。私はこれまでのところ本当に助けに感謝します。 – Deke

関連する問題