質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

913閲覧

accessのサブフォームを参照する際の識別子について

Carlos_is_only

総合スコア44

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2023/07/31 15:16

実現したいこと

Accessの識別子を利用してサブフォームの税込み金額を参照したい

前提

「!」マークはユーザ定義のオブジェクトにつける
「.」はAccess定義のプロパティにつけると参考書に記載があったのですが
Forms![F商品マスター]![単価]
→これはF商品マスターの単価のテキストボックス

Forms![商品マスター]![単価].FontSize
→これはF商品マスターの単価のテキストボックスのフォントサイズ

ここまでは理解できる

サブフォーム内容を参照する場合

[F売上明細].Form![税込合計金額]
→これはサブフォームのF売上明細の税込み合計金額ということなのですが
サブフォームのF売上明細もユーザ定義ですし
後半が税込み合計金額のフォームに見えます。

Form![F売上明細].[税込合計金額]

となるべきなのではないでしょうか?
(ただこの書き方だとメインフォームかサブフォームかわからない書き方になりますが・・・)

最終的に

Accessの識別子を利用してサブフォームの参照をする際の理解の仕方をどなたか教えてください

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Forms![F商品マスター]![単価]

  • Forms コレクションは「その時点においてAccessアプリケーション上で開かれているメインフォーム」の集合に相当する。

  • メインフォーム上に配置されたサブフォームコントロールのソースオブジェクトとして埋め込まれたフォーム(サブフォーム)は、メインフォームが開かれていても Forms コレクションのアイテムには含まれない。

[F売上明細].Form![税込合計金額]

  • メインフォーム上に[F売上明細]という名前のサブフォームコントロールが配置されており、かつ上記のコードがそのメインフォームのフォームモジュールのいずれかのプロシージャに記述されているのであれば、上記の[F売上明細]はメインフォーム上に配置されたサブフォームコントロールを示すメンバー識別子として解釈される(実質的に Me キーワードを省略した構文と同等の意味となる)。

投稿2023/08/01 01:14

編集2023/08/01 01:17
sk.exe

総合スコア1077

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Carlos_is_only

2023/08/05 15:28

なるほどメインフォームはForms!と明記し、そうでない[]で閉じられた書き方はサブフォームとして解釈される決まりとなっているのですね もしよろしければソースなんかがあれば教えていただけると幸いです。
Carlos_is_only

2023/08/05 16:03

只、もう一点だけ 参考書を見るとピリオドはAccess定義のプロパティに付けるとのことなのですが Forms![F商品マスター]![単価].FontSizeと記載されたら単価の「フォントサイズ」プロパティといういみですよね [F売上明細].Form![税込合計金額] [F売上明細]についているForm!というのはフォームとしてのプロパティということですね サブフォームで何か参照をするということは[F売上明細]単体だけでは意味をなさず [F売上明細].Form!という表記で初めてサブフォームとしての認識が果たされるということですね
sk.exe

2023/08/07 02:41 編集

> メインフォームはForms!と明記し、そうでない[]で閉じられた書き方は > サブフォームとして解釈される決まりとなっているのですね [] 修飾子は本来、制限付きキーワードと同じ名前を持つメンバーを参照する場合に使用されます。 例えばそのフォーム上に "Date" という名前のテキストボックスが配置されている場合、そのままモジュール上に記述しても VBA の予約語 Date の方が優先されます。 こうした場合は [] で囲むことによって、明示的にそのテキストボックスを識別させることが出来ます。 逆にそうしたキーワードと競合しない名前が付けられているのであれば、[] を省略してもしなくてもどちらでも構いません。 > もしよろしければソースなんかがあれば教えていただけると幸いです。 https://learn.microsoft.com/en-us/office/vba/api/access.forms https://learn.microsoft.com/en-us/office/vba/api/access.form > 参考書を見るとピリオドはAccess定義のプロパティに付けるとのことなのですが VB において、 . 演算子はメンバーアクセス演算子、! 演算子はディクショナリアクセス演算子です。 メンバーとは、そのオブジェクトにおけるフィールド、プロパティ、メソッド、イベントの総称です。 > Forms![F商品マスター]![単価].FontSizeと記載されたら > 単価の「フォントサイズ」プロパティといういみですよね 構文上の意味としては「その時 Access 上で開かれている全ての Form オブジェクトのうち、[F商品マスター]という名前の Form オブジェクト上の[単価]という名前のコントロールの FontSize という名前のメンバー」です。 最上位オブジェクトやそれぞれのオブジェクトの既定のプロパティを省略せずに記述すると、次のような形となります。 ------------------------------------------------------------ Application.Forms.Item("F商品マスター").Controls.Item("単価").FontSize ------------------------------------------------------------ しかし、実際にこんなふうに記述する必要はありません。 [F商品マスター]のフォームモジュール上において、そのフォーム上に配置されているテキストボックス[単価]を参照する場合、同じ名前の変数や定数がそのモジュール上において宣言されていない限りは次のように短縮できます。 ------------------------------------------------------------ 単価.FontSize ------------------------------------------------------------ > [F売上明細].Form![税込合計金額] > [F売上明細]についているForm!というのはフォームとしてのプロパティということですね https://learn.microsoft.com/en-us/office/vba/api/access.subform.form > サブフォームで何か参照をするということは[F売上明細]単体だけでは意味をなさず > [F売上明細].Form!という表記で初めてサブフォームとしての認識が果たされるということでしょうか? ここでの[F売上明細]は、そのフォーム上に配置されたサブフォームコントロールを示す Access.SubForm オブジェクトです。 Access.SubForm オブジェクトの Form プロパティが返すのは、SourceObject プロパティの設定によって埋め込まれたフォームを示す Access.Form オブジェクトです。 変数を使ってそれぞれのオブジェクトの構造と関係を分かりやすくするなら、次のような形となります。 ------------------------------------------------------------ '変数の宣言 Dim MyForm As Access.Form Dim MyControl As Access.SubForm Dim MySubForm As Access.Form Dim TextBoxInSubForm As Access.TextBox 'このフォーム自身の参照を渡す Set MyForm = Me 'イミディエイトウィンドウに[名前]プロパティの値を出力 Debug.Print MyForm.Name 'フォーム上のサブフォームコントロール[F売上明細]を参照 Set MyControl = MyForm![F売上明細] 'イミディエイトウィンドウに[ソースオブジェクト]プロパティの値を出力 Debug.Print MyControl.SourceObject 'サブフォームコントロールに埋め込まれているフォーム(サブフォーム)を参照 Set MySubForm = MyControl.Form 'イミディエイトウィンドウにそのフォームの[名前]プロパティの値を出力 Debug.Print MySubForm.Name 'サブフォーム上のテキストボックス[税込合計金額]を参照 Set TextBoxInSubForm = MySubForm![税込合計金額] 'イミディエイトウィンドウにそのテキストボックスの値を出力 Debug.Print TextBoxInSubForm.Value ------------------------------------------------------------
Carlos_is_only

2023/08/07 14:33

なるほどの連続です!!!!! ご親切に、ご丁寧にお答えいただて感激です!!!! ・[] 修飾子は本来、制限付きキーワードと同じ名前を持つメンバーを参照する場合に使用される ・ . 演算子はメンバーアクセス演算子、! 演算子はディクショナリアクセス演算子です。  メンバーとは、そのオブジェクトにおけるフィールド、プロパティ、メソッド、イベントの総称です。 ・そのフォーム上に配置されているテキストボックス[単価]を参照する場合、同じ名前の変数や定数がそのモジュール上において宣言されていない限りは次のように短縮できます。 ・ここでの[F売上明細]は、そのフォーム上に配置されたサブフォームコントロールを示す Access.SubForm オブジェクトです。 Access.SubForm オブジェクトの Form プロパティが返すのは、SourceObject プロパティの設定によって埋め込まれたフォームを示す Access.Form オブジェクトです。 →なるほど[F売上明細]というサブフォームオブジェクトに埋め込まれたAccess.Formオブジェクトを呼び出しているといことで [F売上明細].Form![税込合計金額] はF売上明細サブフォームのAccess.Formオブジェクトを呼び出しているのですねこれでフォームのように使用できるということなのですね!!!!! ご親切に教えていただき 誠にありがとうございました!!!!!!!!
guest

0

Form上に配置した テキストボックスコントロール には「テキストボックス1」「テキストボックスB」等の任意で名前が付けられるように
Form上に配置した サブフォームコントロール にも名前が付けられます。(「サブフォーム1」等)
質問文を例に取ると
[サブフォーム1].Form![税込合計金額]
としても良い訳ですね。
Form上に配置したサブフォームコントロールにもForm名と同じ「F売上明細」という名前を付けた為ややこしくなったのかと思われます。

投稿2023/07/31 23:02

odataiki

総合スコア984

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Carlos_is_only

2023/08/05 16:05

参考書を見るとピリオドはAccess定義のプロパティに付けるとのことなのですが Forms![F商品マスター]![単価].FontSizeと記載されたら単価の「フォントサイズ」プロパティといういみという記載がありました。 [F売上明細].Form![税込合計金額] [F売上明細]についているForm!というのはフォームとしてのプロパティということですね サブフォームで何か参照をするということは[F売上明細]単体だけでは意味をなさず [F売上明細].Form!という表記で初めてサブフォームとしての認識が果たされるということでしょうか?
Carlos_is_only

2023/08/05 16:07

つまり[F売上明細]だけでは単なるオブジェクトでしかないという理解でよろしいでしょうか?
odataiki

2023/08/06 02:05

私の経験からくる推測の話になりますが、 Accessにも「インスタンス」の概念があると理解するとスッキリすると感じています。 ```[F売上明細].Form![税込合計金額]```  これは親フォーム上に配置された サブフォームに生成された```F売上明細 ```インスタンスを参照する記載方法 ```Forms![F売上明細].[税込合計金額]``` これは```F売上明細```を親フォームとして開いたときに生成されたインスタンスを参照するときの記載方法 という感じです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問