こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Access VBA コントロールの参照が上手く行かない

お世話になります。
F得意先登録の中にSF得意先課があります。
1つの得意先CDごとに複数の課CDがあります。
両方に自作のレコード移動ボタンを作りましたがサブフォームのコントロールが思うように動作しません。

SF得意先課に
txt得意先課件数(アクティブレコード件数/総件数)
cmb課CD(得意先CDに該当する課CDのみ表示)
cmb課CDの値集合ソースには
SELECT T得意先課.得意先課CD, T得意先課.得意先課名 FROM T得意先課 WHERE (((T得意先課.L得意先CD)=Forms!F得意先登録!得意先CD));
と設定してあります。
という名前のコントロールがあります。
F得意先登録を表示した時に、得意先ごとの件数を正しく表示させたくて、親フォーム(F得意先登録)のレコード移動時イベントに
-------------------------------------
Private Sub Form_Current()
Me!txt得意先件数 = Me.CurrentRecord & "/" & Me.Recordset.RecordCount
Forms![F得意先登録]![SF得意先課]![txt得意先課件数] = Forms![F得意先登録]![SF得意先課].CurrentRecord & "/" & Forms![F得意先登録]![SF得意先課]![txt得意先課件数].Recordset.RecordCount
Forms![F得意先登録]![SF得意先課]![cmb課CD].Requery
End Sub
---------------------
と記述しましたがF得意先登録起動時に、
件数表示のほうは、「実行時エラー438 オブジェクトは、このプロパティまたはメソッドをサポートしていません」
コンボの方は、「実行時エラー2455 指定した式にForm/Reportプロパティに対する正しくない参照が含まれます」
となってしまいます。
上手く行く方法をご教授下さい。よろしくお願いします。

投稿日時 - 2007-04-12 12:44:45

QNo.2914982

すぐに回答ほしいです

質問者が選んだベストアンサー

>Debug.Print TypeName(Forms![F得意先登録]![SF得意先課].Form)
>で止まります。

色々試してみましたが、同じエラーが再現できませんでした。

ひょっとしてAccess95ですか?こんな情報ありました。
http://support.microsoft.com/kb/403715/ja


ちょっと、視点を変えて、別の手法で・・・

親フォーム
Private Sub Form_Current()
 Me!txt得意先件数 = Me.CurrentRecord & "/" & DCount("*", "T得意先")
End Sub

サブフォーム
Private Sub Form_Current()
 Me![txt得意先課件数] = Me.CurrentRecord & "/" & DCount("*", "T得意先課", "L得意先CD=" & Forms![F得意先登録]![得意先CD])
 Me![cmb課CD].Requery
End Sub

こんな感じで、サブフォームにプログラムを移動させるとどうなります?


補足:
DCountを使っているのは、エラー対策とは別件です。
RecordCountは、レコードセットを最後まで読み込まないと正しい値にならない場合があります。

「RecordCountでレコード数が取得できる」と言うのはよくある間違いなのでご注意ください。

RecordCountでレコード数を調べる場合は、事前にMoveLastなどで、最後のレコードまでアクセスしておく必要があります。

投稿日時 - 2007-04-13 14:42:59

補足

venzou様、本当に本当に有難うございました。

補足のご指摘でもしやと思うところがありました。
親フォームではOpenイベントに
-----------------
Private Sub Form_Open(Cancel As Integer)
'件数取得の前処理とコンボの値クリア
Me.Recordset.MoveLast
Me.Recordset.MoveFirst
cmb得意先.Value = Null
End Sub
---------------
を記述してあります。
そして得意先が変わってたら、
サブフォームの数表示のテキストボックスと
検索コンボの値の更新をさせたくて
レコードの移動時イベントで
---------------
Me!txt得意先件数 = Me.CurrentRecord & "/" & Me.Recordset.RecordCount
の下に質問のコードを記述しましたが、
上手くいきませんでした。

venzou様ご教授の記述に変更したところ、上手く行きました。
とても嬉しいです。続く・・・御礼コメント

投稿日時 - 2007-04-13 15:15:26

お礼

感謝々です。
本当に有難うございました。
まだまだ初心者ですが、これからもお時間の許す範囲でご指導下さい。
どうぞよろしくお願いいたします。

投稿日時 - 2007-04-13 15:17:57

ANo.4

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

テーブルとフォームを作って検証してみましたが、
こちらではエラーは出ませんでした。(Access2000)

原因を絞り込むために、下記を実行してみてください。

親フォーム(F得意先登録)のレコード移動時イベント
Private Sub Form_Current()
 Debug.Print TypeName(Forms![F得意先登録])
 Debug.Print TypeName(Forms![F得意先登録]![SF得意先課])
 Debug.Print TypeName(Forms![F得意先登録]![SF得意先課].Form)
 Debug.Print TypeName(Forms![F得意先登録]![SF得意先課].Form.CurrentRecord)
 Debug.Print TypeName(Forms![F得意先登録]![SF得意先課].Form.Recordset.RecordCount)
 Debug.Print TypeName(Forms![F得意先登録]![SF得意先課]![cmb課CD])
 Debug.Print TypeName(Forms![F得意先登録]![SF得意先課]![txt得意先課件数])
End Sub

正常ならイミディエイトウインドウに下記の様に表示されると思います。

Form_F得意先登録
SubForm
Form_SF得意先課
Long
Long
Combobox
Textbox

内容が違ったり、エラーなど出れば、補足してください。


あと別の原因として、データベースの破損を疑った方が良いかも知れません。
バックアップをとった後、最適化/修復や、新規のデータベースに内容をインポートして移す、など、破損対策を試してみて下さい。

投稿日時 - 2007-04-13 11:45:04

補足

venzou様、
何度も質問にお付き合い下さり、また検証して頂いて大変感謝しております。
ご教授のコードを流して見た所、
Debug.Print TypeName(Forms![F得意先登録]![SF得意先課].Form)
で止まります。
「実行時エラー2455 指定した式にForm/Reportプロパティに対する正しくない参照が含まれます」となります。
イミディエイトウィンドウには
SubForm
Form_F得意先登録
のみ表示されます。

親「F得意先登録」を開きプロパティ画面を検証、名前は「SF得意先課」になっています。
データベースの最適化・修復も行いました。
新規のデータベースに内容をインポートして移しても結果は同じです。
何度もすみませんが、後はどこを調べて修正すればよいかご指導よろしくお願い致します。

投稿日時 - 2007-04-13 13:25:19

ANo.2

>Formがもう一つ必要なのは、Dlookup関数などの中に参照式として記述する場合だと参考サイトに書いてありました。

仰るとおり、不要な場合もあるようですね。
(私は全て必要だと勘違いしてました。)


しかし、

>Forms![F得意先登録]![SF得意先課].CurrentRecord
Forms![F得意先登録]![SF得意先課].Form.CurrentRecord

>Forms![F得意先登録]![SF得意先課].Recordset.RecordCount
Forms![F得意先登録]![SF得意先課].Form.Recordset.RecordCount

ここには必要みたいですよ。これで試してみてください。

投稿日時 - 2007-04-12 14:57:36

補足

venzou様、度々のアドバイスを有難うございます。

ご教授の通り、以下の記述に修正しましたが、End Subまで進むものの、、「実行時エラー2455 指定した式にForm/Reportプロパティに対する正しくない参照が含まれます」となり、フォームを開けません。
----------------------------
Forms![F得意先登録].[SF得意先課].[txt得意先課件数] = _
Forms![F得意先登録]![SF得意先課].Form.CurrentRecord & "/" & Forms![F得意先登録]![SF得意先課].Form.Recordset.RecordCount

-----------------------------
また、コンボの値更新の方は
----------------------------
Forms![F得意先登録].[SF得意先課].[cmb課CD].Requery
----------------------------
としたところ依然、「実行時エラー438 オブジェクトは、このプロパティまたはメソッドをサポートしていません」のままです。
コントロール名の前に、.form.としても同じ結果です。
何度も申し訳ありませんが、助けて下さい。
プロパティ等再確認する点があれば、そちらもご指摘下さい。
また、これをご覧になっている皆様でアドバイスがあればよろしくお願い致します。

投稿日時 - 2007-04-13 10:03:26

ANo.1

サブフォーム内のコントロールを参照する場合は

Forms![F得意先登録]![SF得意先課].Form![txt得意先課件数]

こんな感じで、Form が必要だと思います。

とりあえず、これを修正してみてください。何箇所かあります。

投稿日時 - 2007-04-12 13:27:50

補足

早速の回答を有難うございます。
修正してみます。検証後、改めてお返事書かせて頂きます。

投稿日時 - 2007-04-12 13:54:01

お礼

お世話になります。
----------------------------
Forms![F得意先登録]![SF得意先課].Form![txt得意先課件数] = Forms![F得意先登録]![SF得意先課].CurrentRecord & "/" & Forms![F得意先登録]![SF得意先課].Recordset.RecordCount
Forms![F得意先登録]![SF得意先課].Form![cmb課CD].Requery
-------------------------------
でも結果は変わりません。
Formがもう一つ必要なのは、Dlookup関数などの中に参照式として記述する場合だと参考サイトに書いてありました。
他の原因のようですが、ご教授いただけますか?

投稿日時 - 2007-04-12 14:08:34

あなたにオススメの質問