次の方法で共有

Access サブフォームのカレントレコードを取得したい

Anonymous
2012-01-13T09:12:42+00:00

サブフォームのカレントレコードを取得したいのですが、

サブフォームのソースオブジェクトがフォームの場合は、

Me![sf_Info].[Form].CurrentRecordで取得できるのは分かったのですが、

サブフォームのソースオブジェクトがクエリの場合は、

同じようにMe![sf_Info].[Form].CurrentRecordでは取得できません。

(「実行時エラー'2455' 指定した式に、CurrentRecordプロパティに対する不正な参照が含まれます」のエラー発生)

ソースオブジェクトがクエリではカンレントレコードは取得できないのでしょうか。

参考

 ソースオブジェクトをフォームにしない(できない)理由は、

 メインフォームで入力した内容をクロス集計クエリしてサブフォームで再表示したい。

 クロス集計では、列名・列数などが固定ではないため、フォームではできないと考えたからです。

 こちらの解決方法があればそれでもいいのですが。。。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2012-01-14T07:27:33+00:00

ご紹介いただいた関数を試したところ、

Bookmarkのところで、

「指定した式に、Bookmarkプロパティに対する不正な参照が含まれます。」

とエラーになっていましました。。。

フォームの Bookmarkプロパティも2002以降なのかな?

AC2000がないので確認できない。

ならば、下記の関数を試してみてください。

Public Function GetCurrentRecord2(f As Access.Form, KeyFld As String) As Long

Dim rs As DAO.Recordset

Dim MyKey As Variant

Set rs = f.RecordsetClone

If rs.BOF Then Exit Function

MyKey = f(KeyFld)

Do Until rs.EOF

If rs(KeyFld) = MyKey Then

GetCurrentRecord2 = rs.AbsolutePosition + 1

Exit Do

End If

rs.MoveNext

Loop

GetCurrentRecord2 = rs.AbsolutePosition + 1

rs.Close: Set rs = Nothing

End Function

使用例

MsgBox CurrentRecord(Me!サブフォームコントロール名.Form, "ID")

”ID”は重複のないキーフィールド名を指定

独り言

Access2002以降で追加されたプロパティ、メソッド一覧ってどこかにないかな?

この回答は役に立ちましたか?

0 件のコメント コメントはありません

10 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2012-01-14T02:38:14+00:00

    すいません、当方のバージョンはAC2000でした。

    また、AC97ではサブフォームのソースに、クエリは選べないようです。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2012-01-14T02:16:17+00:00

    こんにちは、MukkuMukuです。

    >古いバージョンではサポートされていないということなんでしょうね。

    SubForm.Form.CurrentRecord

    ac2002でも使用できます。別の原因があるのではないでしょうか

    SubForm.Form.Controlsでフィールド参照も可能

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2012-01-13T23:57:41+00:00

    ご回答ありがとうございました。

    AC2010にそのままインポートしたらOKでした。

    古いバージョンではサポートされていないということなんでしょうね。

    列名が変化するフォームのご紹介例は、当方も確認しておりましたが、

    列数が限定できない(100とか200では限定できますが)のであきらめました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2012-01-13T16:18:44+00:00

    当方、Office XP  の環境がないため、AC2003 で確認しました。

    サブフォームのソースオブジェクトにクロス集計クエリを設定して、メインフォームのコマンドボタンのクリック時で

    下記のコードを実行すると、ちゃんとカレントレコード番号が表示されました。

    MsgBox Me!サブフォームコントロール名.Form.CurrentRecord

    > クロス集計では、列名・列数などが固定ではないため、フォームではできないと考えたからです。

    >  こちらの解決方法があればそれでもいいのですが。。。

    下記をご参考に。

    列名が変化するクロス集計クエリと連結するフォーム - hatena chips

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません