判りにくい質問ですみません、どういうことかといいますと。
今、以下のようなコードがあります。
-----------------
If Not AnimalReportNumberSQL(makeSQL) Then
Exit Function
End If
…(1)
-----------------
Public Function AnimalReportNumberSQL(ByRef makeSQL As String) As Boolean
AnimalReportNumberSQL = False
…
makeSQL=(SQL文のようなものがが10行ぐらい出てきます)
…
AnimalReportNumberSQL = True
Exit Function
…(2)
-----------------
makeSQLというのは「Dim makeSQL As String」と、変数宣言されております。SQLを作るための文字列を入れるための変数のようです。
そして上のコードを実行しまして、一行ずつ見ていくと、なぜか(1)のIf Not文内の「Exit Function」に入らず、またEnd Ifの真下にあるコードにも入らず…。
100行ぐらい下にある、(2)の、
Public Function AnimalReportNumberSQL(ByRef makeSQL As String) As Boolean
というコードに飛ぶのです(SQL文の箇所には、makeSQLに格納すると思われるSQLらしき文字列が10行ぐらい、つらつら並んでおります)。
それで(2)の終わり、「Exit Function」を過ぎると、なぜか(1)のEnd Ifに戻るのです。
■
ご存じだとは思うのですが、
VBAの開発環境では、
・ステップ実行
・ブレイクポイントの設定
ができるはずですので、
実際に、ステップ実行させたら、動作がよくわかるのでは?と思います。
■
>If Not AnimalReportNumberSQL(makeSQL) Then
この1行を実行する場合は、
まず AnimalReportNumberSQL(makeSQL) 部分が実行されるはずです。
AnimalReportNumberSQL()は、ユーザー定義関数だと思われますので、
当然、
Public Function AnimalReportNumberSQL(ByRef makeSQL As String) As Boolean
に飛びます。
で、その関数内で処理が終わったら、
元に戻ってきて、
AnimalReportNumberSQL(makeSQL)の返り値(戻り値)に NOT演算したものを評価して
真なら、 Exit Function
義なら、End Ifの次の行に飛びます。
この動きが全く分かりません…なぜ(1)のIf Not文から(2)に飛ぶのでしょうか。(1)で条件を満たさない、If Not(でなければ)であれば、If Not文の中、(1)の「Exit Fuction」に進むか。
もしくはIf Not(でなければ)を満たさないのであれば、(1)のEnd Ifに進むのが、コード通りではないでしょうか。
(1)から(2)に飛ぶ理由をご説明いただけないでしょうか…よろしくお願い致します。
「If Not (通過条件) Then Exit Function」構文では、通過条件を満たさない(Falseの)とき、処理を中止して、If文のあるところを抜けるようになっています。
ここでは、通過条件はAnimalReportNumberSQL()になっていて、If文中の条件を評価するときに、この関数に飛ばしています。
この関数は、返値が、Booleanになっていますが、この関数の真の目的は、参照型変数makeSQLを返すことです。これに成功したら、Trueで下に処理を続け,失敗したらFalseで処理を中止しようとしています。