プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。いつもこちらで勉強をさせていただいております。
早速ですが、次の現象で困っております。

Access2000ベースで開発されたDB内の、あるフォームには当該フォーム内のレコード数を表示するテキストボックスがあります。
このコントロールソースは次のとおりです。

=[RecordsetClone].[RecordCount]

このDBをAccess2000で開くと正常にレコード数が表示されるのですが、Access2007で開くと「#Name?」となって表示されません。
因みにAccess2007の参照設定は「Microsoft DAO 3.6 Object library」にチェックを入れております。

何とかAccess2007でも正常に表示させたいのです。
どなたか解決方法を教えいただけませんか。
よろしくお願いいたします。

A 回答 (2件)

手元のAccess97とAccess2003で確認したところ、現象を確認できました。



どうやら、Access2000~Access2003の間で、コントロールソースやプロパティシートでの
DAOオブジェクトの参照についての仕様変更(つまり使用可→使用不可)があったようです。
(なお、No.1の方が参考に挙げているサイトの内容は、VBE上でのことではないでしょうか)


解決策としては・・・
 a)VBA関数であればコントロールソースでも問題なく使用できるので、レコードソースが
  テーブルやクエリなのでしたら、DCount関数で表示する
 b)ユーザー関数を定義して、その関数で表示する
  (関数内でRecordSetCloneを参照すれば、SQL文によるレコードソースにも対応可)
といった方法があるかと思います。


【「a)」の場合】
 コントロールソースに以下の式を入力:
  =DCount("*","レコードソース名")

【「b)」の場合】
 1)そのフォームのモジュールにユーザー関数を設定(以下の3行をCopy&Pasteで可):
Private Function MyRecordCount() As Long
  MyRecordCount = Me.RecordSetClone.RecordCount
End Function
'※標準モジュールではなくフォームへの設置にしたのは、関数を単純化するため。
'  (フォームを引数にして標準モジュールで定義した場合は別フォームでの使い回しも可能)   

 2)コントロールソースに以下の式を入力:
  =MyRecordCount()


・・・以上です。

この回答への補足

早速のご回答有難うございました。
“a)”の手法が簡単そうだったので試したところ、正常に表示されました。
今後は勉強のために“b)”も試してみたいと思います。
詳しく教えていただき本当にありがとうございました。
本当に助かりました。
今後ともよろしくお願いいたします。

補足日時:2008/07/20 07:37
    • good
    • 0

http://www.whitebinder.com/article/160653/micros …
の最初(一番下)のレス。

要約すると
--------
その書き方は、すべてのバージョンで通用しない(意訳:それは2007では受け付けない)
Forms!フォーム名.RecordsetClone.RecordCount

Me.RecordsetClone.RecordCount
と書け
--------
って事。

この回答への補足

助言をいただき感謝いたします。
早速実行しましたが、同じエラーが発生しています。

変更前
=[RecordsetClone].[RecordCount]

変更後
=[Me].[Recordset].[RecordCount]
=[Forms!フォーム名].[Recordset].[RecordCount]

何か他の方法はないでしょうか?
よろしくお願いします。

補足日時:2008/07/19 19:01
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!