質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

Q&A

解決済

1回答

1496閲覧

【VBA】フォルダの昨日00:00~23:59のメールを取得したい

masuken

総合スコア5

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

0グッド

0クリップ

投稿2021/09/14 15:46

編集2021/09/14 16:15

解決したいこと

指定フォルダの昨日00:0023:59のメールを取得してきたいのですが、当日の8:00以降だったり10:00以降だったりのメールしか取得できず、
日によって件数が前後してしまって安定しません。
0:00
23:59でメールのフィルタリングをするにはどうすればできますか?

以下にフィルタリングのコードも記載しているので、間違いがあればご指摘いただきたいです

該当するソースコード

Public Sub SaveSelectedAsText() Dim dtStart As Date Dim dtEnd As Date Const TEXT_FILE = "C:Desktop\テスト.txt" ' 保存するファイル名を指定 Dim strStart As String Dim strEnd As String Dim objOL As Object Dim objNAMESPC As Object Dim strFilter As String Dim myfolders As Object Dim objMail As MailItem Dim colItems As Items Dim objAttach As Attachment Dim strAttach As String dtStart = Date - 1 dtEnd = Date - 1 strStart = FormatDateTime(dtStart, vbShortDate) strEnd = FormatDateTime(dtEnd, vbShortDate) strFilter = "[受信日時] >= '" & strStart & _ "' AND [受信日時] <= '" & strEnd & " 23:59'" '保存したいメールフォルダを取得 Set objOL = CreateObject("Outlook.Application") Set objNAMESPC = objOL.GetNamespace("MAPI") Set myfolders = objNAMESPC.Folders("kea@gmail.jp").Folders("追加") 'メールフォルダをフィルタリング Set colItems = myfolders.Items.Restrict(strFilter) Open TEXT_FILE For Output As #1 For Each objMail In colItems With objMail Print #1, "差出人:" & vbTab & .SenderName Print #1, "送信日時:" & vbTab & .SentOn If .To <> "" Then Print #1, "宛先:" & vbTab & .To End If If .CC <> "" Then Print #1, "CC:" & vbTab & .CC End If Print #1, "件名:" & vbTab & .Subject If .Attachments.Count > 0 Then strAttach = "" For Each objAttach In .Attachments strAttach = strAttach & objAttach.Filename & "; " Next strAttach = Left(strAttach, Len(strAttach) - 2) Print #1, "添付ファイル: " & vbTab & strAttach End If If .Importance <> olImportanceNormal And .Sensitivity <> olNormal Then Print #1, "" End If If .Importance = olImportanceHigh Then Print #1, "重要度:" & vbTab & "高" End If If .Importance = olImportanceHigh Then Print #1, "重要度:" & vbTab & "低" End If If .Sensitivity = olConfidential Then Print #1, "秘密度:" & vbTab & "社外秘" End If If .Sensitivity = olPersonal Then Print #1, "秘密度:" & vbTab & "個人用" End If If .Sensitivity = olPrivate Then Print #1, "秘密度:" & vbTab & "親展" End If If .Categories <> "" Then Print #1, "" Print #1, "分類項目:" & vbTab & .Categories End If Print #1, "" Print #1, .Body Print #1, "" End With Next Close #1 End Sub

自分で試したこと

『"[受信日時] >= '" & strStart & "00:00'" & _』とすると、ColItemsがNothingとなってしまってうまくいきませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2021/09/14 15:53

冒頭に On Error Resume Next を書いているのがおかしいので、とりあえず、削除してみましょう。
masuken

2021/09/14 16:13

ありがとうございます! 修正しました。 ただ、やはりまだ9/14は8:00以降のメールしか取得できません…。
masuken

2021/09/15 07:29

ありがとうございます。
guest

回答1

0

ベストアンサー

0:00~23:59でメールのフィルタリングをするにはどうすればできますか?

あなたが試みた通り、開始日時の条件を「日付 00:00」(あるいは「日付 0:00」)の形式にする

『"[受信日時] >= '" & strStart & "00:00'" & _』とすると、ColItemsがNothingとなってしまってうまくいきませんでした。

原因は、日付と00:00の間に空白が入っていないために、"2021/09/1500:00"のような状態になっていたから。

diff

1 strFilter = "[受信日時] >= '" & strStart & _ 2- "' AND [受信日時] <= '" & strEnd & " 23:59'" 3+ " 00:00' AND [受信日時] <= '" & strEnd & " 23:59'"

なお、フィルターに時刻を追加するよりも、変数strStartstrEndに追加したほうがわかりやすいのでは。

VBA

1 strStart = FormatDateTime(dtStart, vbShortDate) & " 00:00" 2 strEnd = FormatDateTime(dtEnd, vbShortDate) & " 23:59" 3 4 strFilter = "[受信日時] >= '" & strStart & "' AND [受信日時] <= '" & strEnd & "'"

投稿2021/09/14 18:12

編集2021/09/14 18:14
Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問