電子書籍の厳選無料作品が豊富!

度々失礼いたします。

ACCESS2003で、のタブコントロールのページ名の表示について、下記の通りご質問させていただいておりました。
1回目
http://oshiete.goo.ne.jp/qa/7373426.html
2回目
http://oshiete.goo.ne.jp/qa/7381264.html

おかげさまで起動時にサブフォームにあるテキストがページ名として表示されるようにはなったのですが、うまく動きません。

詳細をご説明いたしますと、

ページが8ページあり、それぞれ部屋1、部屋2、部屋3…という名前を付けています。
タブコントロール名は「料金タブ」、
各サブフォーム内にあるページ名として表示させたいテキストボックス(コンボボックス)名は「部屋名」です。

まずはじめに部屋1のページにあるサブフォーム内に下記コードを書き足すと、うまく動きました。


Private Sub 部屋名_BeforeUpdate(Cancel As Integer)

Me.Parent.ActiveControl.Parent.Caption = Nz(Me.部屋名)

End Sub

Private Sub Form_Current()

Me.Parent.Controls("料金タブ").Pages(部屋3).Caption = Me!部屋名

End Sub

同じように部屋2にもPagesの()内だけを書き換えていくと、
今度は部屋2のサブフォーム内にあるテキストが、部屋1のページ名として表示されるようになりました。
試しに部屋3に同じことをしても同様の結果で、部屋1のページ名として表示されてしまいます。

初心者のため、どうすればよいか全く分からずじまいです…。
恐れ入りますが、お教えいただけますでしょうか。
宜しくお願い致します。

A 回答 (1件)

> Me.Parent.Controls("料金タブ").Pages(部屋3).Caption = Me!部屋名



この 「部屋3」 が "部屋3" という名前ではなく

 Dim 部屋3 As Variant
 部屋3 = 0

と同義になっています。

すなわち
 Me.Parent.Controls("料金タブ").Pages(0).Caption = Me!部屋名
になり、一番左のタブを参照することになってしまいます。


こういう分かりにくいバグをなくするためには
モジュールの先頭に
 Option Explicit
の1行を加えてください。
コンパイラが警告してくれるようになります。

なお、VBE の [ツール] - [オプション] の [編集]タブで
「変数の宣言を強制する」 に チェックをしておけば
今後、新規作成するモジュールには自動で
 Option Explicit
が宣言されるようになります。

この回答への補足

お返事遅くなりました!
ご回答ありがうございます。

Option Explicit
の使い方が、初心者のためよくわからなかったため、

Me.Parent.Controls("料金タブ").Pages(★).Caption = Me!部屋名

の、★部分をページの数字に変更することで、できるようになったのですが、
一部ページにこのコマンドを適用すると、エラーがでてできません。
3ページくらいだと問題ないのですが、他のページに追加するとできません。
名前は違いますが、内容は全く同じサブフォームなんですが…。

何か制限でもあるのでしょうか?

補足日時:2012/05/04 17:06
    • good
    • 0

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