LoginSignup
2
1

More than 5 years have passed since last update.

Accessフォームでタブコントロールのタブを非表示に出来ちゃった

Last updated at Posted at 2019-04-20

なんでこの記事が必要なのか

Accessのフォームにタブコントロールを設置して、個々のタブ(Access用語におけるページ)をメニュー選択により表示したり、非表示にしたりするのを、VBAでやりたいと思いました。

イメージとしては、フォームの上部にメニュー、下部にタブコントロールがあって、メニューを選ぶとタブコントロールに必要なタブだけが表示される。選んだメニューによって表示されるタブが違う。

ということで、タブコントロール内の個々のページの表示・非表示についてさっそくggってみたのですが、removeメソッドを使え、という古い記事ばかりヒットする。タブを一度削除してしまって、再表示するときは生成するってことですね。
ええー流石にそんなわけないだろうと思って、手探りでトライアンドエラーしていたらやり方がわかったので、記念にここに記するわけであります。
(※補足しておくと、Accessの古いバージョンでは、この方法ができなかったんだと思う。古いAccessなど手元にないのでわかりませんが、先人の誰も試していないとは思えないので。ちなみに私はOffice 365のAccessを使用しています。今どきAccess使ってる人どんだけいるのかな…)

で、どうやったら出来たのか

Me![タブコントロールの名前].Pages(0).Visible = True
Me![タブコントロールの名前].Pages(1).Visible = False

タブコントロールの名前は、タブ群全体の名前ね(各ページの名前ではなく)。

Pages()のカッコの中の数字は、ページインデックスが入ります。
それ何?って人は、フォームをデザインビューで開いて、タブコントロールの中の一つのタブを選択すると、右側のプロパティウィンドウに「ページインデックス 0」とか書いてあるところがあるので、そこの数字をチェックしてください。
というか、タブの並びを、左から数えた順番(ゼロ始まり)だと思います。

Visible = True だと表示する。
Visible = False だと非表示にする。
上記の例ではページインデックスが0のページを表示、1のページを非表示。です。

気になってる点

上述の通り、ページインデックス=ページの並び順っぽい。
後から並び順変えたくなったり、途中にページを追加したりしたとき、既存のページとインデックスの数字の対応が変わっちゃうんですが、その度にコード書き換えるのやだな…って思いますよね…

対処としてはPages()の中身は変数にしておいて、変数の中身はタブページの名称からページインデックスを照会してあてはめる。とかで対処できるのかとは思いますが、試してないのでできるかどうかはわかりません(※追記参照)。

追記

やり方わかりました。

Me![タブコントロールの名前].Pages("ページ1").Visible = True
Me![タブコントロールの名前].Pages("ページ2").Visible = False

先ほどの例でページインデックスを書いてたところに、ページの名前をダブルクォートで囲って記述すればOKのようです。
注意事項として、ページインデックス0のページの名前のデフォルトが「ページ1」、ページインデックス1のページが「ページ2」なんで一瞬お?ってなったんですけど、いい子のみなさんは適切に命名しましょうね。

以上、お粗末様でした。誰かの役に立つといいんですけどね。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1