質問: VBAのif not~then文で条件が成立するかどうかを判定する際に、引数や計算式が何も入っていない場合にエラー文に飛べるのかが疑問です 今、VBAのコードで、疑問に直面しておりまして。 Water関数の中身がしっかり理解できず、質問させていただきます。 コードはこちら になります。 前回の、 Access VBAにおけるDo...Loopステートメント内にあるAdd Trueメソッド?につきまして という質問で提示させていただいたコードに似ていますが、新たに疑問が生じました。 疑問は4つあります。 (1)if not文から「Water」関数に飛んだのですが。「~でない(nothing)」時にexit_procに飛ぶとは思うのですが。「Waterではない」というのは、どういう条件なのでしょうか?そもそも「Water()」は条件式になってないような...引数も何もないですし。どういう条件を満たした時にexit_procに飛ぶのでしょうか。
回答: >(1)if not文から「Water」関数に飛んだのですが。「~でない(nothing)」時にexit_procに飛ぶとは思うのですが。「Waterではない」というのは、どういう条件なのでしょうか? 本物の方の関数名がどうなっているのか分かりませんが、Water 関数は、想定通りに動くと True を返します。 期待していないエラーが起きた場合には、False を返します。 「Waterではない」と読んでしまうと訳が分かりませんが、以下のコードと同じことをやっていると思うと、何となく分かりませんか? ``` success = Water() ' きちんと動いたら True if success then GoTo exit_proc ' きちんと動いたら、exit_proc に goto ``` > (2)「clng(format(me.txtdate.value,"yyyymmdd"))」の箇所ですが、clng関数で値を偶数の整数に丸めている 違います。 Clng 関数は、数字っぽい文字列を Long (数字の型) に変換します。 Excel で、表示形式が日付/時刻になっている場合、そのセルには 1900年1月1日 0:00 が 1 で、日が増えると 1 ずつ増える値になっています。 この回答を書いている 2020/7/3 0:00 は、44015 という値です。 それを、format(me.txtdate.value,"yyyymmdd") は、日付っぽい文字列にします。 me.txtdate.value が 44015 であれば、それを "20200703" という文字列に変換します。 Clng は、その文字列 "20200703" を 20200703 という整数に変換します。 > (3)「accounting.add true, .fields(0).value & "#" & .fields(1).value」につきまして、 その認識で合ってます。 > (4)「if not accounting is nothing then set accounting = nothing」につきまして、 オブジェクトの参照を指定して New したり、CreateObject で作ったものは、最後に Nothing を代入する、と覚えておいてください。 「何かいいことあるのでしょうか?」ですが、使っているこちらは細かいことを知らなくても良いけれど、色々な後始末をしてくれている、と思ってください。 ひとつ前の質問で、テキストファイルを扱うのがあったじゃないですか。 あれは、Open で使う準備をして、Close でお終い、というセットになっているのですけれど、それと同じだと思ってください。