Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Access 2016)
サブフォームの値が1行しか表示されない
投稿日時: 19/09/23 15:08:17
投稿者: ひろと

VBAでフォームの中のボタンクリック時にサブフォームの値を変えたいと思います。
契約_BTNクリック → 形態(サブフォーム)切り替え
 
下記VBAで切り替えはできるのですが、サブフォームの表示がテーブル(形態_T)の1行(先頭行)しか表示されません。
サブフォームは非連結なので、親との連結はありません。
 
Private Sub 契約_BTN_Click()
  Dim tableName As String: tableName = "形態_T"
  Me.ラベル.Caption = tableName 'ラベルのキャプション(標題)を設定
  Me.形態_SF.SourceObject = "テーブル." & tableName 'サブフォームのソースオブジェクトを設定
  Me.形態_SF.SetFocus 'サブフォームをアクティブに
End Sub
 
フォーム 既定のビューなどを変更してみましたが、全行の表示にはなりません。

回答
投稿日時: 19/09/24 10:09:54
投稿者: sk

引用:
下記VBAで切り替えはできるのですが、サブフォームの表示が
テーブル(形態_T)の1行(先頭行)しか表示されません。
サブフォームは非連結なので、親との連結はありません

引用:
Dim tableName As String: tableName = "形態_T"

引用:
Me.形態_SF.SourceObject = "テーブル." & tableName

恐らく以下のいずれかの条件に該当しているため、
[形態_SF]の SourceObject プロパティを設定されたのに伴い、
LinkMasterFields プロパティと LinkChildFields プロパティが
自動的に設定されているのでしょう。
 
・メインフォームとサブフォームのレコードソースが共にテーブルであり、
 かつそれらのテーブル間にリレーションシップが定義されている場合。
 
・メインフォームのレコードソースであるテーブルに主キーが設定されており、
 かつその主キーと名前が一致し、同一のデータ型または互換性があるデータ型が
 設定されたフィールドが、サブフォームのレコードソースであるテーブル/クエリに
 含まれている場合。
 
---------------------------------------------------------------------
 
Me.形態_SF.SourceObject = "テーブル." & tableName 'サブフォームのソースオブジェクトを設定
 
'デバッグ用
Debug.Print "形態_SF.LinkMasterFields: " & Me.形態_SF.LinkMasterFields
Debug.Print "形態_SF.LinkChildFields: " & Me.形態_SF.LinkChildFields
 
'[形態_SF]のリンクフィールドを明示的に設定
Me.形態_SF.LinkMasterFields = ""
Me.形態_SF.LinkChildFields = ""
   
Me.形態_SF.SetFocus 'サブフォームをアクティブに
 
---------------------------------------------------------------------

投稿日時: 19/09/28 09:06:59
投稿者: ひろと

お世話になります。
 
[形態_SF]の SourceObject プロパティを設定されたのに伴い、
LinkMasterFields プロパティと LinkChildFields プロパティが
自動的に設定されているのでしょう。
 
まさにその通りでした。
 
'[形態_SF]のリンクフィールドを明示的に設定
Me.形態_SF.LinkMasterFields = ""
Me.形態_SF.LinkChildFields = ""
 
上記で解決しました。
 
ありがとうございます。