当サイトの記事にはプロモーションが含まれています。

Outlook VBAで待機時間を設定する方法

パソコンパソコン・スマホ教室
スポンサーリンク

皆さん、こんにちは。今日は、OutlookのVBAマクロで「待機時間」を設定する方法についてお話しします。例えば、特定のメールを受信した際に、すぐに処理を開始するのではなく、数秒待ってから動作させたいとき、どうすれば良いのでしょうか?実は、Excelには`Application.Wait`という待機メソッドがありますが、残念ながらOutlookにはこの機能がありません。では、どうすれば良いのでしょうか?一緒に見ていきましょう。

スポンサーリンク

Outlookで待機時間を設定する理由

Outlookのイメージ

Outlookのイメージ

まず、なぜOutlookで待機時間を設定する必要があるのでしょうか?例えば、特定の件名のメールを受信したときに、自動的にスクリプトを実行したい場合があります。しかし、メールを受信するとすぐにコードが実行され、メールが特定のフォルダに移動する前に処理が始まってしまうことがあります。これを防ぐために、少し待機時間を設けてから処理を開始することが有効です。

Outlookでの待機時間の設定方法

Outlookには`Application.Wait`メソッドがないため、別の方法で待機時間を設定する必要があります。以下に、簡単な方法をご紹介します。

1. DoEventsを使用したループ

この方法では、指定した時間だけループを使って待機します。以下は、そのサンプルコードです。

vb
Public Sub WaitForSeconds(ByVal nSeconds As Single)
Dim t As Single
t = Timer
Do While Timer < t + nSeconds DoEvents Loop End Sub

この`WaitForSeconds`サブプロシージャを使って、例えば5秒待機したい場合は、以下のように呼び出します。

vb
WaitForSeconds 5

この方法は、Outlookの他の操作をブロックせずに待機時間を設定できます。

2. Windows APIのSleep関数を使用

もう一つの方法は、WindowsのAPI関数である`Sleep`を使用する方法です。以下のように宣言します。

vb
#If VBThen
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

そして、例えば5秒待機したい場合は、以下のように呼び出します。

vb
Sleep 5000 ' 単位はミリ秒なので、5000ミリ秒は5秒です

ただし、この方法は待機中にOutlook全体が操作不能になる可能性があるため、注意が必要です。

このサイトをチップで応援

実際の活用例

例えば、新しいメールを受信したときに、特定の件名の場合のみ5秒待ってから処理を開始するマクロを作成することができます。以下はそのサンプルコードです。

vb
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
Dim arr() As String
Dim itm As Object
Dim mail As Outlook.MailItem
Dim ns As Outlook.NameSpace

Set ns = Application.GetNamespace("MAPI")
arr = Split(EntryIDCollection, ",")

For i = LBound(arr) To UBound(arr)
Set itm = ns.GetItemFromID(arr(i))
If TypeOf itm Is Outlook.MailItem Then
Set mail = itm
If mail.Subject = "特定の件名" Then
WaitForSeconds 5 ' 5秒待機
' ここに処理内容を記述
End If
End If
Next
End Sub

このコードでは、新しいメールを受信した際に、件名が「特定の件名」の場合、5秒待ってから処理を開始します。

よくある質問や疑問

Outlookで`Application.Wait`が使えないのはなぜですか?

`Application.Wait`はExcel専用のメソッドであり、Outlookには実装されていません。そのため、Outlookで待機時間を設定する場合は、他の方法を使用する必要があります。

`Sleep`関数を使用するとOutlookが操作不能になるのはなぜですか?

`Sleep`関数は指定した時間だけプロセスを停止させるため、その間Outlook全体が応答しなくなる可能性があります。待機中も他の操作を可能にするためには、`DoEvents`を使用したループをおすすめします。

まとめ

OutlookのVBAで待機時間を設定する方法についてご紹介しました。`DoEvents`を使用したループや、`Sleep`関数を活用することで、目的の待機時間を実現できます。用途や状況に応じて、適切な方法を選択してください。他にも疑問やお悩み事があればお気軽にLINEからお声掛けください。

この記事を書いた人
この記事を書いた人

企業の情報システム部門で10年以上、PC・アカウント・社内ネットワーク・Microsoft 365/Google Workspace運用を担当。年間数百件の問い合わせ対応(PC不調、メール送受信、Excel/Word資料、Teams会議、スマホ連携など)を通じて、初心者がつまずくポイントを「再現→原因切り分け→最短解決」の手順に落とし込んできました

現場や身近で実際に起きたトラブルをベースに、手順だけでなく「なぜそうなるか」「失敗しやすい落とし穴」「安全な設定(セキュリティ)」まで含めて解説します。

相談窓口(問い合わせ/LINE等)を設け、記事で解決しないケースも個別にサポートしていますので「パソコンが急に動かなくなった」「スマホの設定がわからない」などの悩みは一人で抱え込まず、お気軽にご相談ください。

【お問い合わせは下記URLから】
https://m32006400n.xsrv.jp/inquiry-form/

【公式LINEは下記URLから】
https://lin.ee/t8TDjcj

uri uriをフォローする
スポンサーリンク
よかったらシェアしてね! /
uri uriをフォローする

コメント

タイトルとURLをコピーしました