/ / Outlookから最新のEメールをExcelにインポート(VBA) - Excel、VBA、Eメール、Outlook、PST

Excelからの最新の電子メールをExcel(VBA)にインポート - Excel、VBA、電子メール、Outlook、PST

私はこれを調べるのに多くの時間を費やしました、そして私はまだ完全な答えを見つけることになっていません。私がしたいのは100をつかむことです 最も最近の Outlookから電子メールを送信し、Excelブックに貼り付けます。私はそれを達成したコードを(いくつかの異なるウェブサイトから借りる)構築しました、しかしそれはそれを見逃しています最も最近の「」

このコードをExcelで実行すると、101行になります。私が指定した情報で印刷されたものはどれが良いですか。しかし、それは最近のEメールにはありません。下の画像に表示されている場合、現在の時刻は午後7時18分ですが、Excelにインポートされる電子メールは本日以前の午後2時17分からのものです。 (プライバシー上の理由から他のコラムは非表示にしました)

スクリーンショット

元々、Eメールはからのみ貼り付けられていましたOutlook 2013で自分のアカウントを削除して再度追加したのは、数ヶ月前ではなく、今日の午後2時17分からExcelのコードで暗号化が開始されたときのことです。これは、アカウントがOutlookにリンクされている時点で作成されたPSTファイルを読み取るだけのコードと関係がありますが、完全にはわかりません。

私はこの問題を広範囲にグーグルしました、そして誰も同じ問題が発生しているようです。私は自分のコードを修正して最も最近のEメールだけを取得する方法があるかどうかを知りたいだけです。元のPSTファイルに含まれているアーカイブされた電子メールを取り込む必要はありません。コードが実行されるたびにPSTファイルを再構築する方法はありますか?アクティブなOutlookウィンドウからコードを読み取ることができる方法ではありませんか。アーカイブファイル?何かアドバイスがあれば幸いです。

ここに私のコード:

Sub Test()

"Dim objOL As Object
"Set objOL = CreateObject("Outlook.Application")

Dim objOL As Outlook.Application
Set objOL = New Outlook.Application

Dim OLF As Outlook.MAPIFolder
Set OLF = GetObject("", "Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)

Dim CurrUser As String
Dim EmailItem
Dim i As Integer
Dim EmailCount As Integer

Dim WS As Worksheet " assigns variable WS to being a new worksheet
Application.ScreenUpdating = False
Set WS = Sheets.Add(After:=Sheets(Worksheets.Count)) " creates a new worksheet
ActiveSheet.Name = "List of Received Emails" " renames the worksheet

" adds the headers
Cells(1, 1).Formula = "From:"
Cells(1, 2).Formula = "Cc:"
Cells(1, 3).Formula = "Subject:"
Cells(1, 4).Formula = "Date"
Cells(1, 5).Formula = "Received"

With Range("A1:E1").Font " range of cells and the font style
.Bold = True
.Size = 14
End With

EmailItemCount = OLF.Items.Count

i = 0
EmailCount = 0

" reads e-mail information
While i < 100
i = i + 1
With OLF.Items(i)
EmailCount = EmailCount + 1
Cells(EmailCount + 1, 1).Formula = .SenderName
Cells(EmailCount + 1, 2).Formula = .CC
Cells(EmailCount + 1, 3).Formula = .Subject
Cells(EmailCount + 1, 4).Formula = Format(.ReceivedTime, "mm/dd/yyyy")
Cells(EmailCount + 1, 5).Formula = Format(.ReceivedTime, "hh:mm AMPM")
End With
Wend
Set OLF = Nothing
Columns("A:D").AutoFit
Range("A2").Select

Application.StatusBar = False

End Sub

P.S ExcelブックでMicrosoft Outlook 15.0 Object Library参照を有効にしています。

回答:

回答№1は1

あなたはできる Restrict そして Sort その Items あなたが得ること...ここにMSDNのリファレンスを参照してください。 Items.Sortの参照

例えば、あなたのループの前に:

 OLF.Items.Sort "[SentOn]", True

(真は下降のためのものです...)