Microsoft Access 掲示板

サブフォームにデータをセットできない

2 コメント
views
4 フォロー

ACCESSで開発しています

OS:Windows10
開発:Office365 Access

単票フォームにコンボボックスを2つ、
サブフォームを1つ、コマンドボタン1つを置いています。

コンボボックスのリストには
それぞれ顧客名と物件名が入っています。

コンボボックスのリストから選択すると、
それぞれのIDがコンボボックスのラベルに表示されます。

コマンドボタンを押したときに、
コンボボックスのIDを条件に、
サブフォームに一覧を表示しようとしています。

コードは以下の通りです。

Private Sub コマンド6_Click()
    Dim strsql As String
    Dim strWHsql As String
    Dim objRS As Object
    Dim strKokyaku As String
    Dim strBuken As String

    `コンボボックスのラベルにあるIDを変数に格納
    strKokyaku = Trim(lblKokyaku.Caption & "")
    strBuken = Trim(lblBuken.Caption & "")
    `

    `SQL作成
    strsql = "select *"
    strsql = strsql & " from M_顧客"
    strsql = strsql & " inner join"
    strsql = strsql & " M_物件 "
    strsql = strsql & " on M_顧客.ID = M_物件.顧客ID"
    If strKokyaku <> "" Then
        strWHsql = " where"
        strWHsql = strWHsql & " M_顧客.ID = '" & strKokyaku & "'"
    End If
    If strBuken <> "" Then
        If strKokyaku = "" Then
            strWHsql = " where"
        Else
            strWHsql = strWHsql & " AND"
        End If
        strWHsql = strWHsql & " M_物件.ID = '" & strBuken & "'"
    End If
    If strWHsql <> "" Then
        strsql = strsql & strWHsql
    End If
    `

    `レコードセットを開く
    Set objRS = CurrentDb.OpenRecordset(strsql)
    `

    `サブフォームにデータをセット
    Me!sfDetail.Form.RecordSource = strsql
    Set Me!sfDetail.Form.Recordset = objRS
    `
End Sub

Set objRS = CurrentDb.OpenRecordset(strsql)の所ではエラーは出ません。
ブレークポイントを置いて、イミディエイトウインドで確認しても
?objRS.EOF → Falseが返ってきますし、
?objRS![M_物件.顧客ID] → 00002の様に、正しい値が返ってきます。

しかし、Me!sfDetail.Form.RecordSource = strsqlでも
Set Me!sfDetail.Form.Recordset = objRSでも
実行時エラー2467 指定した式で、閉じているか存在しないオブジェクトを参照しています
というエラーが出ます。

どなたか解決方法をご存じの方、
ご享受していただけないでしょうか。

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

ヘンリー
作成: 2020/02/27 (木) 16:16:24
最終更新: 2020/02/27 (木) 16:16:24
通報 ...
1

ます、サブフォームにデータを表示するなら、RecordSourceプロパティに SQLを設定するだけでOKです。

OpenRecordsetでレコードセットを開く必要も、Recordsetプロパティにレコードセットを代入する必要もありません。

Me!sfDetail.Form.RecordSource = strsqlのところで「閉じているか存在しないオブジェクトを参照しています」のエラーが出るのでしょうか。

だとしたら、sfDetail がサブフォームコントロール名でないのが原因かと思われます。
サブフォーム名ではなくサブフォームコントロール名になってますか。下記参照

サブフォームとサブフォームコントロールの違いとは?
サブフォーム(サブレポートも同様)上のコントロールを参照するときは、 Forms!メインフォーム名!サブフォームコントロール名.Form!コントロール名 という書式になります。 この書式は分かっていても、サブフォーム名とサブフォームコントロール名を混同しているために、参照エラーで掲示板に質問してくる人が絶えません。 掲示板の回答でこれまで何回も説明してきたのですが、これを言葉だけで説明するのはなかなか...
fc2

2
ヘンリー 2020/03/16 (月) 14:36:51 9484e@6d73f

返答が遅くなり大変申し訳ございません。
原因は、サブフォームのソースオブジェクトが空だったことと思われます。

クエリを作成しておいて、サブフォームのソースオブジェクトプロパティに
そのクエリを入れてから、RecordSourceにSQL文を入れることで解決出来ました。

ご回答いただき、大変助かりました。
本当にありがとうございました。