「みんな教えて! 選手権!!」開催のお知らせ

アクセス2007のVBAについて質問します。

図のようにフォームにタブとコマンドボタンを設置しました。
コマンドボタンを押すと、現在アクティブなページ番号を表示させたいです。

今は
Private Sub コマンド5_Click()
Dim i As Long
MsgBox "現在アクティブなタブはページ" & i & "です。"
End Sub

としていますが
どういうVBAコードを書けば
現在アクティブなタブのページ名を取得できるのでしょうか?

アドバイスよろしくお願いします。

「現在アクティブなタブのページ名を取得した」の質問画像

A 回答 (2件)

me!タブコントロール名.pages(me!タブコントロール名.value).name


で取得できました。

選択する場合は
me!タブコントロール名.pages(Index番号).setfocus

me!タブコントロール名.pages("ページ2").setfocus
で。
    • good
    • 0
この回答へのお礼

できました!選択する方法も教えていただき助かります。ありがとうございました。

お礼日時:2012/02/20 22:34

簡単なのは、ボタンの数だけイベントプロシージャを記述し、


すべてのボタンクリックから同じプロシージャを呼び出す方法かな。

コマンドボタンが1~4まであったとして、フォームのモジュールに

Private Sub コマンド1_Click()
msg
End Sub

Private Sub コマンド2_Click()
msg
End Sub

Private Sub コマンド3_Click()
msg
End Sub

Private Sub コマンド4_Click()
msg
End Sub

Sub msg()
MsgBox "現在アクティブなタブは" & Me.ActiveControl.Parent.Name & "です。"
End Sub

この方法は、ボタン(ページ)の数が増えるとその分だけ、イベントプロシージャの数が増えます。ボタン(ページ)の数が数個までならおすすめです。

ボタン(ページ)が非常に多い場合は、クラスモジュールを使った方が、コードが短くなります。
以下、クラスモジュールに記述、クラスモジュール名はClass1のままです。

Option Compare Database
Option Explicit

Private WithEvents clsCB As CommandButton

Private Sub clsCB_Click()
MsgBox "現在アクティブなタブは" & clsCB.Parent.Name & "です。"
End Sub

Public Property Get btn() As CommandButton

End Property

Public Property Let btn(NewBtn As CommandButton)
Set clsCB = NewBtn
clsCB.OnClick = "[Event Procedure]"
End Property

以下フォームモジュールに記述

Option Compare Database
Option Explicit

Dim cls() As Class2

Private Sub Form_Open(Cancel As Integer)

Dim c As Control
Dim i As Integer

For Each c In Me.Controls
If TypeName(c) = "CommandButton" Then
i = i + 1
ReDim Preserve cls(i)
Set cls(i) = New Class1
cls(i).btn = c
End If
Next
End Sub
    • good
    • 0
この回答へのお礼

クラスモジュールを使うのは難しいのでもっと勉強してみます。ありがとうございました。

お礼日時:2012/02/20 22:34

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A