Accessの質問です。
今、添付ファイルのようなフォームがあります。
フォーム「サンプルフォーム」の中に、サブフォーム「サンプルSub」がありまして。
サンプルSubの中に「入力欄1」「入力欄2」があります。
この状況で、VBAを読んでいきますと。
-----------
Private Sub SampleForm(Cancel As Integer)
…
Dim input1 as long '入力欄1
Dim input2 as long '入力欄2
…
input1 = IIf(IsNull(Forms("サンプルフォーム").サンプルSub.Form.入力欄1.Value),0,Forms("サンプルフォーム").サンプルSub.Form.入力欄1)
input2 = IIf(IsNull(Forms("サンプルフォーム").サンプルSub.Form.入力欄2.Value),0,Forms("サンプルフォーム").サンプルSub.Form.入力欄2)
…
-----------
のような記載があります。
input1 = IIf(IsNull(Forms("サンプルフォーム").サンプルSub.Form.入力欄1.Value),0,Forms("サンプルフォーム").サンプルSub.Form.入力欄1)
input2 = IIf(IsNull(Forms("サンプルフォーム").サンプルSub.Form.入力欄2.Value),0,Forms("サンプルフォーム").サンプルSub.Form.入力欄2)
の2行は、IsNull関数でテキストボックスの中がnullかどうかをチェックしまして。
IIf関数で、nullだった場合は0を返して、そうでないときは長々とした処理内容を返す…という処理かと思います。
そしてこの2行は、処理を行っているというか、セルを単に参照しているだけかと思います。
ただこの参照について、「~サンプルSub.Form.入力欄1~」「~サンプルSub.Form.入力欄2~」の部分が何なのか、わからないです。これはFormプロパティでしょうか?オブジェクト?なぜ必要なのでしょうか…
「Forms("サンプルフォーム") 」はフォームまたはフォームモジュールかと思います。その次の「.サンプルSub」は、「.」(ドット)を使って、更にサブフォームを参照していると認識しております。となると「~サンプルSub.Form.入力欄1~」「~サンプルSub.Form.入力欄2~」は、Formプロパティなのかな?と思いましたが。Formプロパティを使うときは、オブジェクトを参照するときの"!"で参照しているようですので。https://docs.microsoft.com/ja-jp/office/vba/api/access.form.form
いったい何なのか…混乱しております。
ご説明いただけますと助かります。
よろしくお願い致します。
Formプロパティなのかな?と思いましたが。
この理解で良いと思います。
Formプロパティを使うときは、オブジェクトを参照するときの"!"で参照しているようですので。
その "!" は、bang operator と呼ばれるものです。
自分でコードを書くときには、忘れてても問題ないやつなのですが、他人のコードを読むときには知っておいた方が良いかも、くらいのやつです。
# あくまでも、個人の感想です :-)
"!" は、デフォルトメンバをアクセスするために使われます。
Form などは、Item メソッドがデフォルトメンバになっていて、"!" を使ったときには、Item メソッドの呼び出しになります。
Item メソッドでは、名前がついているプロパティを取得できるので、"." と同じような感じで使えますが、本来は仕組みが違います。
Formプロパティなのかな?と思いましたが。
この理解で良いと思います。
Formプロパティを使うときは、オブジェクトを参照するときの"!"で参照しているようですので。
その "!" は、bang operator と呼ばれるものです。
自分でコードを書くときには、忘れてても問題ないやつなのですが、他人のコードを読むときには知っておいた方が良いかも、くらいのやつです。
# あくまでも、個人の感想です :-)
"!" は、デフォルトメンバをアクセスするために使われます。
Form などは、Item メソッドがデフォルトメンバになっていて、"!" を使ったときには、Item メソッドの呼び出しになります。
Item メソッドでは、名前がついているプロパティを取得できるので、"." と同じような感じで使えますが、本来は仕組みが違います。
Form プロパティがあると便利な場面があるんです。
イベントを処理するときに、それ自身だけを操作したいのではなく、他に影響が及ぶ場合。
例えば、他の値が連動する(計算の結果)とか、必須項目をすべて入力し終わると、「更新」ボタンがアクティブになる、とか。
もちろん、Form の名前を指定して Forms コレクションから Form を手に入れる、とかもできるのですが、こういった処理をしたいフォームがたくさんあって、処理を共通にしたい。
そんなときには、パーツから、それを抱えている Form が取れると便利だったりします。
このまま、いろいろと VBA のコードを書いていくと、そんな場面に出くわすこともあると思います。
今のところは、Form が取れるんだな、とだけ頭の片隅に置いておけば良いんじゃないかと思います。
わかりました、フォームが取得できるFormプロパティとして理解しておきます!
Form プロパティがあると便利な場面があるんです。
2020/04/27 10:27:32イベントを処理するときに、それ自身だけを操作したいのではなく、他に影響が及ぶ場合。
例えば、他の値が連動する(計算の結果)とか、必須項目をすべて入力し終わると、「更新」ボタンがアクティブになる、とか。
もちろん、Form の名前を指定して Forms コレクションから Form を手に入れる、とかもできるのですが、こういった処理をしたいフォームがたくさんあって、処理を共通にしたい。
そんなときには、パーツから、それを抱えている Form が取れると便利だったりします。
このまま、いろいろと VBA のコードを書いていくと、そんな場面に出くわすこともあると思います。
今のところは、Form が取れるんだな、とだけ頭の片隅に置いておけば良いんじゃないかと思います。
わかりました、フォームが取得できるFormプロパティとして理解しておきます!
2020/04/27 16:52:48