<Access タブコントロールを探り表示データ切り替え>
どうも、三流プログラマーのKen3です。 今回は、 Accessのタブコントロールを探ってみたいと思います。 たいした内容じゃないのですが。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba099.lzh にdb099.mdb(Access2000版)が保存されています。/* * 1.今回のキッカケ */
http://www.ken3.org/cgi-bin/bbs/vba/wforum.cgi の掲示板に、 >タイトル:タブ切り替えで、クエリ毎にレコード抽出するには? > >タブ切る替えることで、対象となるクエリだけを抽出したいのです。 >VBで可能なら挑戦したいのでアドバイスお願いできますか! --- と書き込みをもらいました。 タブコントロールを探ってみたいと思います。/* * 2.普通の使い方? */
顧客 ID 会社名 顧客の氏名 顧客のシメイ 支社名/支店名 請求先住所 市区町村 都道府県 郵便番号 国/地域 顧客の部署名 電話番号 内線番号 FAX 番号 電子メール アドレス 備考 なんて項目から単票フォームを普通に作成すると、 縦に長くなってしまいます。これを、項目別にタブを付けた感じにするために、 タブコントロールを作成します。 タブコントロール?使ったことが無い人も多いと思いますが、
みたいにひっそりと、下のほうに存在してます。 これをフォームに配置します。 ページ33,ページ34なんて感じで、タブが表示されます。
データを3つのグループに分けてみます。 名称 住所 連絡先 とタブを作ります。 えっ、2つしかタブが表示されてないよ。 落ち着いて下さいよ、チャント追加できます、 タブコントロールを選択して、 右ボタンを押し、ページの挿入を選択します。
下記のように縦に長かった入力エリアを タブを使って、グループ分けできました。
![]()
/* * 3.タブコントロールのイベントを探る */
そんな、普通の使い方なんて、聞いてないんだよ、 質問、読み返してみろよボケ と、 読者が言ってるかはわかりませんが、(言われてないけど) 質問を読み返すと、 --- >タイトル:タブ切り替えで、クエリ毎にレコード抽出するには? > >タブ切る替えることで、対象となるクエリだけを抽出したいのです。 >VBで可能なら挑戦したいのでアドバイスお願いできますか! --- そっか、タブが切り替わったタイミングで、 クエリーを変更させたいのか(データを絞りたいのか、、、) よし、イベントを探りますか。 各ページのイベントには、 クリック ダブルクリック マウスボタンクリック マウスボタン移動時 マウスボタン開放時 とあるので、クリック時に、
Private Sub P1_Click()
MsgBox "p1タブが押されました"
End Sub |
変更時のイベントを確認したかったので、
Private Sub tab_ctl_TEST_Change()
MsgBox "_Change 変更時のイベントです"
End Sub |
Private Sub tab_ctl_TEST_Change()
Dim select_page As Integer
'選択ページの番号を代入する
select_page = Me![tab_ctl_TEST].Value
'メッセージを表示する
MsgBox select_page & "番目のタブが選択されました"
End Sub |
のように、3番目のページを選択すると、2と返してくれます。
これは、ヘルプにもあるように、
0,1,2とページ番号が振られているためです。
※左から0番目とは言いにくいけど(人間的には1番目と言いたい)
パターン的に覚えてね。
その後、名称を
横浜、阪神、巨人、ヤクルト、中日、広島
に変更します。
ヤバイ、ALL条件なしを忘れてた(画面のコピーを取ってから気が付いたので(笑))
ALL 横浜、阪神、巨人、ヤクルト、中日、広島
のタブ(インデックスのタグ)を作成します。
ALL 横浜、阪神、巨人、ヤクルト、中日、広島
0 1 2 3 4 5 6
って、タブ構成です。
TAB_SELECTって名前のタブコントロール名にして、
_Changeの変更時のイベントに、クエリーを変えるじゃないけど、
フォームの元になるレコードソースを変えてみます。
Private Sub TAB_SELECT_Change()
Dim strチーム名 As Variant 'チーム名を配列で受け取る
'タブの順番と同じ名前の配列を作成する
strチーム名 = Array("ALL", "横浜", "阪神", "巨人", "ヤクルト", "中日", "広島")
Dim strTNAME As String '選択されたチーム名を受け取る
'選択されたタブに対応したチーム名を配列から代入
strTNAME = strチーム名(Me![TAB_SELECT].Value)
'データソース用のSQL文を作成する
Dim strSQL As String
If strTNAME = "ALL" Then '全てのデータ条件無しなら
strSQL = "select * from T_AVG Order By 打率順位"
'↑T_AVGテーブルから全ての項目をセレクト、打率順位順とする
Else
'T_AVGテーブルから全ての項目をセレクト、
'条件はチーム名が一致するデータ、打率順位順とする
strSQL = "Select * From T_AVG " _
& "Where チーム = '" & strTNAME & "' " _
& "Order By 打率順位"
End If
'データを絞り込むSQL文が完成したので、
'それをフォームのレコードソースにセットする
Me.RecordSource = strSQL '単にSQL文を代入するだけでOKなんですよ
End Sub |
↑寂しい、横浜のバッター陣・・・規定打席は4人かぁ・・
↓それに比べて阪神は規定打席7人も、固定メンバーだと強いよね・・
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
|
気になったジャンル↓を選択してください。 人気記事(来場者が多いTOP3): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 |
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]