質問: vbaについての質問です。 ユーザーフォームのQueryCloseイベントについてですがプロシージャの宣言文で引数Cancelの型式がinteger型になっているのは何故でしょうか? BeforeDoubleClick、BeforeRightClick、PivotTableAfterValueChange PivotTableAfterValueChangeのイベントのワークシートイベントにおいてもワークブックイベントにおいてもCancelの型式はBoolean型で宣言されています。 ちなみに宣言文の型式をCancel As Booleanに変えればもちろん宣言エラーになります。 実際に引数CancelにTrue、Falseでも0と0以外の整数を入れても型式に合わせて変換された値が代入されています。(QueryCloseイベントではCancel=Trueと入れるとCancelの値は-1に、Falseと入れると0として渡される) 特に支障を来すことはないのですが以前からずっと気になっていました。 理由がお分かりになるかたがいれば教えて下さい。
回答: 推測です。 QueryCloseのもう一つの引数 CloseMode がIntegerです。 Cancelに0以外の値を渡すとTrueになるのを利用すると、CloseModeの値から定数を引いた値をCancelに渡せばそのCloseModeの時だけ閉じる処理を簡単に書けます。 Cancel = CloseMode で 閉じるボタンを押した時だけ閉じる Cancel = CloseMode - 1 で Unloadがコードから呼び出された時だけ閉じる Cancel = CloseMode - 2 で Windows時だけ閉じる Cancel = CloseMode - 3 で タスク マネージャーで終了する時だけ閉じる <CloseModeの定数> vbFormControlMenu 0 ユーザーが、UserForm の コントロール メニューで [閉じる] コマンドを選択しました。 vbFormCode 1 コードから Unload ステートメントが呼び出されます。 vbAppWindows 2 現在の Windows オペレーティング環境セッションが終了しようとしています。 vbAppTaskManager 3 Windows タスク マネージャー がアプリケーションを閉じようとしています。