3

私は Outlook VBA の専門家ではありませんが、非常にうまく機能するいくつかのマクロを作成することができました。私はしばらくの間、以下のコードに取り組んできましたが、小さな問題が残っています。このマクロは、共有受信トレイのサブフォルダーからすべての電子メールに関する情報を Excel ファイルにインポートします。私が抱えている問題は、for next ループがメール以外のアイテム (会議への招待や配信失敗の通知など) に遭遇したときです。コードは「次の」行で停止し、これらの非メール アイテムが検出されると「タイプの不一致」エラーが発生します。もう一度再生を押すと、別のメール以外のアイテムに遭遇するまでコードが続行されます。これらのメール以外のアイテムをスキップして、完全な受信トレイ/フォルダーをループするコードを作成したいと考えています。

「On Error Resume Next」を試してみましたが、「Next」行をスキップして、実際に「For Each」行にループバックせずに残りのコードを続行しているようです。私は If ステートメントと GoTo ステートメントをいじりましたが、どれもうまくいきません。誰でも助けてもらえますか?

また、マクロ全般に関する別の問題もあります。受信トレイの「ARCHIVE」サブフォルダーを認識していないように見えるため、実行されない場合もありますが、それ以外の場合は問題ありません。私の推測では、共有受信トレイがサーバーと同期している場合など、「ARCHIVE」フォルダーにアクセスすることはできませんが、それは推測にすぎません。誰かがこの問題にもっと光を当てることができれば、私はそれを大いに感謝します.

Sub EmailStatsV3()

Dim olMail As Outlook.MailItem
Dim aOutput() As Variant
Dim lCnt As Long
Dim xlApp As Excel.Application
Dim xlSh As Excel.Worksheet
Dim flInbox As Folder

'Gets the mailbox and shared folder inbox
Dim myNamespace As Outlook.NameSpace
Dim myRecipient As Outlook.Recipient
Set myNamespace = Application.GetNamespace("MAPI")
Set myRecipient = myNamespace.CreateRecipient("Shared Inbox") 'Change "Shared Inbox" to whatever shared inbox you use

Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objInbox = objNamespace.GetSharedDefaultFolder(myRecipient, olFolderInbox)

'Uses the Parent of the Inbox to specify the mailbox
strFolderName = objInbox.Parent

'Specifies the folder (inbox or other) to pull the info from
Set objMailbox = objNamespace.Folders(strFolderName)
Set objFolder = objMailbox.Folders("Inbox").Folders("ARCHIVE") 'Change this line to specify folder
Set colItems = objFolder.Items

'Specify which email items to extract
ReDim aOutput(1 To objFolder.Items.Count, 1 To 5)
For Each olMail In objFolder.Items
If TypeName(olMail) = "MailItem" Then

        lCnt = lCnt + 1
        aOutput(lCnt, 1) = olMail.SenderEmailAddress 'Sender or SenderName also gives similar output
        aOutput(lCnt, 2) = olMail.ReceivedTime 'stats on when received
        aOutput(lCnt, 3) = olMail.ConversationTopic 'group based on subject w/o regard to prefix
        aOutput(lCnt, 4) = olMail.Subject 'to split out prefix
        aOutput(lCnt, 5) = olMail.Categories 'to split out category
End If

Next olMail

'Creates a blank workbook in excel then inputs the info from Outlook
Set xlApp = New Excel.Application
Set xlSh = xlApp.Workbooks.Add.Sheets(1)

xlSh.Range("A1").Resize(UBound(aOutput, 1), UBound(aOutput, 2)).Value = aOutput
xlApp.Visible = True


End Sub
4

1 に答える 1

2

変化する

Dim olMail As Outlook.MailItem

Dim olMail As Variant

ループ内でVariantコレクションを反復するには、型を使用する必要があります。あなたの例では、アイテムは aではありません。がメール アイテムであるかどうかを確認するためのチェックインが既に行われているため、代わりにここでバリアントを使用できます。For EachNextMailItemolMail

于 2015-09-23T13:55:24.427 に答える