質問: VBAにおける2つの引数を持つboolean型の関数と「Cancel As Integer」につきまして 今、以下のような関数があります。 この関数は大まかに「リアルタイム情報」というテーブルにデータを挿入しているようですが。 いくつか疑問が生じまして。 (1)Touroku関数の2つの引数「byVal iSta as integer」「byval iNsta as integer」についてなのですが。boolean型にも関わらず、引数が2つあることに違和感を覚えました。 boolean型ならtrueかfalseの2つの結果しかないと思ったのですが。 iStaとiNstaのそれぞれに、trueかfalseが入る...という認識で正しいでしょうか?
回答: (1)について 関数の戻り値の型(ここではBoolean)と関数の各引数の型には関係はありません。 この関数はiStaというInteger型とiNstaというInteger型の二つの引数を持つ戻り値がBoolean型の関数である、ということです。 iSta,iNstaの使い方を見ると、「リアルタイム情報」というテーブルに登録する内容なのでテーブルの定義を見た方が正確ですね。 (2)について Cancel引数はByrefで定義されていたと思います。Byrefで定義された引数は呼び出し元の変数の値も変更されます(参照型の引数)。 Cancel=Trueにしてあげると呼び出し元でもCancel=Trueだから呼び出し元(ここではイベントを発生させるVBAのシステムのことですが)でCancel=True時の処理をするのだろう、ということです。その結果としてフォーカスが移動しない、と。 Boolean型のTrueは-1でFalse=0ですがIf文の内部判定では「TrueかFalseか」ではなく「Falseか、Falseでないか」と判定しています。つまり、 If 1 then とすると1≠-1だからElseに行くわけではなくて1≠0なのでThen側の処理に進みます。