top of page

​タグ一覧

配列処理(76)

シート・セル操作(34)

階層化フォーム(33)

ファイル操作(31)

開発事例(26)

図形操作(24)

設計思想(14)

講座実施報告(12)

開発効率化(10)

ユーザーフォーム(10)

コード自動生成(10)

ココナラ(9)

数学(9)

文字列操作(8)

イベントプロシージャ(7)

GAS(7)

Webアプリ(6)

副業(5)

アニメーション(5)

技術解説(4)

その他(5)

イミディエイトウィンドウ(4)

OneDrive(4)

Googleスプレッドシート(4)

クリップボード(4)

条件付き書式(4)

介護・福祉(4)

小説(3)

HTML(3)

JavaScript(3)

公開ツール(3)

Enum(2)

PDF(2)

フリーランス(2)

リスキリング(2)

Outlook(2)

Discord(2)

シフト表(2)

LookerStudio(2)

日報(2)

カレンダー(2)

パズル(2)

小ネタ(2)

コード解説(2)

クラスモジュール(2)

Antigravity(2)

デスクトップアプリ(2)

スクレイピング(1)

スプレッドシート(1)

QRコード(1)

実行予約(1)

給与計算(1)

VBA不使用(1)

超勉強会(1)

溶接ロボット(1)

楽天市場(1)

経理(1)

医療(1)

文書作成(1)

発注書(1)

WebAPI(1)

学校(1)

CAD(1)

PowerShell(1)

python(1)

WaitByDoEvents|DoEventsループで処理を待機する

WaitByDoEvents|DoEventsループで処理を待機する

この部品でできること

WaitByDoEvents は、DoEvents をループさせることで、指定したミリ秒だけ処理を待機させるExcel VBAの汎用プロシージャです。

  • 引数に待ち時間(ミリ秒)を渡すだけで、その時間だけ処理を止められる

  • 待機中も画面の再描画やOS・Excelのメッセージ処理が止まらない

  • Windows APIの宣言が不要。標準モジュールにそのまま貼り付ければ動作する

 

使いどころ

  • ボタンを押した瞬間だけ色を変えて、少し待ってから元の色に戻す、といった演出のウェイトに(ChangePushedButtonColorがこの用途で使っています)

  • 処理の合間に短い間を置いて、画面の変化をユーザーに確認させたいとき

  • Application.Wait や Windows APIの Sleep が使いにくい・不安定な環境でも、確実に動く待機処理が欲しいとき

 

コード

 

使い方・引数

引数は1つだけです。

  • MillSecond(Long)・・・待機したい時間(ミリ秒)。例えば 100 なら0.1秒待ちます

呼び出し例は次のとおりです。

Timer 関数で処理開始時刻を記録しておき、DoEvents を呼びながらループで経過時間をチェックし、指定時間を超えたらループを抜けるだけのシンプルな仕組みです。

 

依存プロシージャ

このコードは自作の依存プロシージャを持たない、自己完結した部品です。上のコードブロックをそのまま標準モジュールに貼り付ければ動作します。

 

応用・注意点

VBAで「少しだけ待つ」処理を書く方法はいくつかありますが、WaitByDoEvents ではそれらを使わず、あえて DoEvents のループにしています。

  • Windows APIの Sleep 関数Declare 文でAPIを宣言する必要があり、32bit版・64bit版のOfficeで宣言の書き方が変わります。さらにExcel for Macでは同じ形のAPI宣言が使えないため、Windows専用のコードになってしまいます。

  • Application.Wait:秒未満の細かい待ち時間を指定しにくく、待機中は画面の再描画やイベント処理も止まります。ボタンの色を一瞬変えて見せるような演出では、待機中に画面が固まって見えてしまうと本末転倒です。

  • DoEvents ループTimer と組み合わせるだけなので宣言が不要で、Windows・Mac問わず同じコードで動きます。ループの中で DoEvents を呼ぶことで、待機中もOSやExcelのメッセージ処理(画面の再描画やクリック等のイベント)が止まらずに進みます。

一方で、DoEvents はその性質上、待機中にユーザーが別の操作をすると、そちらのイベントも割り込んで実行されてしまう(再入してしまう)という副作用があります。今回のような「ボタンを押した直後に一瞬だけ色を変える」といった短時間・単純な用途では問題になりにくいですが、待機中に他の処理が割り込んでは困るような重い処理を待たせる用途には向きません。用途に応じて使い分けてください。

 

まとめ

WaitByDoEvents は、DoEvents をループさせるだけの短いコードで、指定したミリ秒だけ処理を待機できる汎用プロシージャです。Windows APIの Sleep のような環境依存の宣言が不要で、待機中も画面の描画やイベント処理が止まらないのが特徴です。ボタン押下時の色変更演出のような「一瞬だけ待ちたい」場面があれば、そのまま呼び出すだけで使えます。

Excel VBAによる業務自動化・ツール開発をご検討の方へ

​"脱Excel"の前に、現状のExcelの潜在能力を120%発揮してみませんか?

softex-celwareロゴ 透過 横長.png

​インボイス登録番号:T5810983887134

  • Facebook
  • Twitter
  • YouTube

©2023 softex-celware。Wix.com で作成されました。

bottom of page