1587710597 Access VBAでオブジェクトなのかプロパティなのかメソッドなのかの判別で悩んでいます


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)

-----------

のような記載があります。

回答の条件
  • 1人20回まで
  • 登録:
  • 終了:2020/04/28 10:52:42
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:moon-fondu

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  

いったい何なのか…混乱しております。

ご説明いただけますと助かります。

よろしくお願い致します。

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント1200pt

Formプロパティなのかな?と思いましたが。

この理解で良いと思います。


Formプロパティを使うときは、オブジェクトを参照するときの"!"で参照しているようですので。

その "!" は、bang operator と呼ばれるものです。
自分でコードを書くときには、忘れてても問題ないやつなのですが、他人のコードを読むときには知っておいた方が良いかも、くらいのやつです。
# あくまでも、個人の感想です :-)

"!" は、デフォルトメンバをアクセスするために使われます。
Form などは、Item メソッドがデフォルトメンバになっていて、"!" を使ったときには、Item メソッドの呼び出しになります。

Item メソッドでは、名前がついているプロパティを取得できるので、"." と同じような感じで使えますが、本来は仕組みが違います。

他1件のコメントを見る
id:a-kuma3

Form プロパティがあると便利な場面があるんです。

イベントを処理するときに、それ自身だけを操作したいのではなく、他に影響が及ぶ場合。
例えば、他の値が連動する(計算の結果)とか、必須項目をすべて入力し終わると、「更新」ボタンがアクティブになる、とか。

もちろん、Form の名前を指定して Forms コレクションから Form を手に入れる、とかもできるのですが、こういった処理をしたいフォームがたくさんあって、処理を共通にしたい。
そんなときには、パーツから、それを抱えている Form が取れると便利だったりします。

このまま、いろいろと VBA のコードを書いていくと、そんな場面に出くわすこともあると思います。
今のところは、Form が取れるんだな、とだけ頭の片隅に置いておけば良いんじゃないかと思います。

2020/04/27 10:27:32
id:moon-fondu

わかりました、フォームが取得できるFormプロパティとして理解しておきます!

2020/04/27 16:52:48

その他の回答1件)

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154ここでベストアンサー

ポイント1200pt

Formプロパティなのかな?と思いましたが。

この理解で良いと思います。


Formプロパティを使うときは、オブジェクトを参照するときの"!"で参照しているようですので。

その "!" は、bang operator と呼ばれるものです。
自分でコードを書くときには、忘れてても問題ないやつなのですが、他人のコードを読むときには知っておいた方が良いかも、くらいのやつです。
# あくまでも、個人の感想です :-)

"!" は、デフォルトメンバをアクセスするために使われます。
Form などは、Item メソッドがデフォルトメンバになっていて、"!" を使ったときには、Item メソッドの呼び出しになります。

Item メソッドでは、名前がついているプロパティを取得できるので、"." と同じような感じで使えますが、本来は仕組みが違います。

他1件のコメントを見る
id:a-kuma3

Form プロパティがあると便利な場面があるんです。

イベントを処理するときに、それ自身だけを操作したいのではなく、他に影響が及ぶ場合。
例えば、他の値が連動する(計算の結果)とか、必須項目をすべて入力し終わると、「更新」ボタンがアクティブになる、とか。

もちろん、Form の名前を指定して Forms コレクションから Form を手に入れる、とかもできるのですが、こういった処理をしたいフォームがたくさんあって、処理を共通にしたい。
そんなときには、パーツから、それを抱えている Form が取れると便利だったりします。

このまま、いろいろと VBA のコードを書いていくと、そんな場面に出くわすこともあると思います。
今のところは、Form が取れるんだな、とだけ頭の片隅に置いておけば良いんじゃないかと思います。

2020/04/27 10:27:32
id:moon-fondu

わかりました、フォームが取得できるFormプロパティとして理解しておきます!

2020/04/27 16:52:48
id:chsm No.2

回答回数33ベストアンサー獲得回数5

ポイント10pt

多分正しいと思われます。

id:moon-fondu

コメントありがとうございます。

2020/04/28 10:52:19
  • id:moon-fondu
    input1 = IIf(IsNull(Forms("サンプルフォーム").サンプルSub.Form.入力欄1.Value),0,Forms("サンプルフォーム").サンプルSub.Form.入力欄1.Value)
    input2 = IIf(IsNull(Forms("サンプルフォーム").サンプルSub.Form.入力欄2.Value),0,Forms("サンプルフォーム").サンプルSub.Form.入力欄2.Value)

    でした、失礼しました。
    NullでないときはValueプロパティで値を返しているのだろうというのはわかります。
    「Form」の正体が不明です…。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません