<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 MS-Access97大魔法陳列棚>オプションボタンセット



【仕 様 な ど】MS-Access97で作成。Windows95でのみ動作確認。

【ダウンロード】←Zip形式
            (解凍後、mdb初期状態:およそ186KB)

【主 な 機 能】

コントロールの利用サンプルです。


【作 り 方 等】

オプションボタン、トグルボタン、チェックボックスは、Accessでも定番のYes/Noコントロールです。
どれも、マウスでクリックして使います。
選択されているときは-1(On,Trueと表現することも)、選択されてないときは0(Off,False)という値を持っていることになります。

チェックボックスは単独で使うことも多いです。
テーブルのフィールドタイプをYes/No型にしておくと、大概そのフィールドはチェックボックス的な扱いを受けます。
例えば「資料送付の有無」とか、「受講経験あり/なし」とか、そんな感じのフィールドなら、キーボードから「あり」とか「なし」とか入力するより、かちっとチェックマークを付ける方が楽ですよね。見た目にもわかりやすいです。

もちろん、トグルでもオプションボタンでもいいのですが、こういうYes/No型のフィールドでは、チェックボックスを見かけるケースが多いと思います。
トグルもオプションボタンも、いっこだけで使うことはできます。でも、トグルボタンは、見た目にわかりにくいような気がしますが・・・。


さて、これらのコントロールは、集団で使用することも可能です。例えば、男女の区別のケースを考えてみましょう。
チェックボックスいっこでは、「チェックがついてるのが男、ついてないのが女」という使い方もできますが、わかりにくいです。
そこで、これらのコントロールを2つならべて、どちらかがクリックされたら、もう片方はオフになる仕組みを作るのです。
これが「オプショングループの作成」です。

作り方はカンタンです。まず、フォームにオプショングループのフレームを作ります。

ツールボックスの中で、左側の上から二番目に、xyzと書かれたボタンがありますね。これがオプショングループです。
これをクリックしてから、フォーム上に適当な大きさの枠をドラッグして作ります。
「フレームXX」というラベルがついてますが、書き換えて使ってもいいし、要らなければラベルだけクリックして削除してしまいましょう。

で、この中に、トグルでもチェックボックスでもオプションボタンでも、どれでもよいので(2種類以上併用してもよい)作ります。
フレームの中に作ろうとすると、フレームの色が濃くなるので、わかりやすいと思います。
同じ物を作るからといって、コピー&ペーストはイケマセン。ひとつずつ丁寧に作ります。
オプションボタンを2つ作ってみました。ラベルは適当に書き換えてください。

では、オプションボタンのプロパティを見てみましょう。小さいので選択しにくいですけれど、メダマの方をうまく選択してプロパティシートを出します。

データのプロパティの中に、オプション値という欄があります。これが、このオプションボタンの値です。
同じフレームの中のコントロールにそれぞれ違う値が割り当てられます。もう片方のオプションボタンは1だと思います。

今度はフレームのプロパティを見ます。外枠のあたりをクリックすれば、出てくると思います。

このフレームのコントロールソースというところに、実際のテーブルのフィールドを割り当てれば、性別のフィールド内に1か2という1桁の数字が入ります。
(クリックされた方のオプションボタンのオプション値)。


これがオプショングループの使い方の基本ですが、この他にも、使い道があります。

今のはテーブルのフィールドと連動させる方法でしたが、マクロやプロシージャとうまく組み合わせる使い方も面白いです。

例えばこのサンプルでは、コンボボックスの中身が変るような仕掛けを作っています。

トグルボタンをクリックしたら、そのチームのメンバーがコンボボックスに表示されるようにしています。

あらかじめ、各チームのメンバーを記したテーブル「さるテーブル」「もうじゅうてーぶる」「ねずみテーブル」を作っておきます。

そして、上のオプションボタンの例にしたがって、オプショングループを作ります。今度はコントロールが3ついります。別にトグルじゃなくてもよいです。

あと、ただのコンボボックスをひとつ作ります。中の値は後で決めるので、ウィザードなどが働き始めたらキャンセルしてしまってください。
このコンボボックスの名前を、コンボ9と仮定します。

で、マクロかクラスモジュールを作ります。下のはモジュールのサンプルです。フレームのイベントプロパティを出して、クリック時のイベントを作ります。
右端にビルドボタンが出てきますので、マクロを作りたい人はマクロビルダ、モジュールで勝負の人はコードビルダを選びます。

で、ここにこんな処理を書き込みます。

Private Sub フレーム4_Click()
Select Case フレーム4
Case 1
Me!コンボ9.RowSource = "さるテーブル"
Me!ラベル11.Visible = True
Me!ラベル12.Visible = False
Me!ラベル13.Visible = False
Case 2
Me!コンボ9.RowSource = "もうじゅうテーブル"
Me!ラベル11.Visible = False
Me!ラベル12.Visible = True
Me!ラベル13.Visible = False
Case 3
Me!コンボ9.RowSource = "ねずみテーブル"
Me!ラベル11.Visible = False
Me!ラベル12.Visible = False
Me!ラベル13.Visible = True
End Select
DoCmd.GoToControl "コンボ9"
SendKeys "%{down}", True
End Sub

文字をちょっと大きくしたところが、みそです。他の行はオマケの処理なので、とりあえず目をつむってください。
Rowsourceというのが、プロパティシートの「値集合ソース」というプロパティの正式名称になります。
こうしておくと、後からプロパティの内容を変更することができるのです。
コントロールが2つのときはIf then elseでよいのですが、コントロールが3つ以上になったら、select caseステートメントを利用します。

最後にSendkeyという行がありますが、これはキー送信というコマンドです。Altキーを押しながら下矢印キーを押したことになります。
よけいなことですが、コンボボックスの中を開けといてやろうと思って付けました。
でも、基本的にマウスで操作するように考えられてるので、あまりこのキー送信コマンドは連発しない方がよいでしょう。


さらに発展させたのがこれです。全会員の中から、カナで抽出して表示させます。

これも同じように、フレームの中にコントロールを作って、フレームのイベントで値集合ソースが変るようにしています。
今度は、チョット数が多いですね。
下はクラスモジュールのサンプルです。フレームのクリック時のイベントとして作りました。
今度はコンボボックスではなくて、フォームのレコードソースを変更しています。

Private Sub フレーム8_Click()
Select Case フレーム8
Case 1
Me.RecordSource = "あ行"
Case 2
Me.RecordSource = "か行"
Case 3
Me.RecordSource = "さ行"
Case 4
Me.RecordSource = "た行"
Case 5
Me.RecordSource = "な行"
Case 6
Me.RecordSource = "は行"
Case 7
Me.RecordSource = "ま行"
Case 8
Me.RecordSource = "や行"
Case 9
Me.RecordSource = "ら行"
Case 10
Me.RecordSource = "わ行"
Case 11
Me.RecordSource = "会員テーブル"
End Select
End Sub

やり方は何通りか考えられると思います。上記では、クエリーを使っています。
あらかじめ、あ行ならあ行で始まる会員だけを抽出するクエリーを作っておきます。
ちょっと面倒ですけど、下のようなクエリーを用意します。これは「あ行」のクエリーですので、「か行」「さ行」・・・と用意します。

で、フレームの値が変ったら(どれかオプションボタンがクリックされたら)、フォームのレコードソースが変るようになるのです。

画面での解説では少し分かりにくいかと思います。
ダウンロードできるファイルには、以上のようなサンプルフォームがいくつか入っていますので、プロパティなど参考になさってみてください。


おまけの「スピンボタンコーナー」では、スピンボタンのサンプルを乗せています。

画面はこんな感じのデザインにしています。

上向きのスピンボタンをかたかたクリックすると、数字がどんどん大きくなります。
50を超えてもなおクリックを続けると、今まで非表示だったラベルが表示されるようになり「そんなにクリックしても別に何も起こりませんよ」というメッセージが現れます。

スピンボタンの解説は、黒魔法の「CD&Record所蔵データベース」のところにも載せてますので、そちらも参考にしてくださいね。

スピンボタンのようなアイテムは、自分自身に値を持っているんですけれど、表示することが出来ないカラダなので(笑)
マクロやプロシージャを作って、どっか他のコントロールに値の代入をして使います。
こういうコントロールのプロパティの中には、必ず「Value」というプロパティがあります。
これらのコントロールが保持している値が入っているわけですね。これを何かのタイミングでどっかに代入すればよいのです。

しかしながらわかりにくい!
それもこれも、正式なAccessのコントロールじゃなくて、カスタムコントロールという、およそのコントロールたちだからなのかもしれません。
私たちが無意識のうちに使っているプロパティシートとか、しきビルダとか、ウィザードとか、そういう機能は基本的にAccessそのものの機能なので、こういうよそ者コントロールの場合は使えなかったり使いにくかったりするわけです。

プロパティシートに出てこないイベントがあったりして、油断なりません。
ActiveXのマニュアルが手元にあればよいのかもしれないですが、私は恥ずかしながら持ってないので、いろいろな角度から検索して、ヘルプをフル活用します。


さて、では、簡単に作り方といいますか、どのへんをいじればよさそうなもんか、つづってみたいと思います。
仕組みさえ理解できれば、いろいろ応用も利くと思いますよ。

まず、フォームのどこかに、スピンボタンとテキストボックスを作ります。
テキストボックスじゃなくてもいいんですが、多分イチバンわかりやすいと思うので、これで解説させてください。Valueの代入先です。

スピンボタンは、通常のツールボックスにないので、

メニューバー[ツール]→[ActiveXコントロール...]
ツールボックスの[コントロールの選択]

の、いずれかを選択します。

そうすると、何やらいっぱい一覧が出てきます。スピンボタンは、人によっては2〜3種類存在している場合もあると思います。
どれでもいちおうスピンボタンの形にはなるんですが、Accessのマクロやコードでコントロールできないといけないので、そういうプロパティを持っているのはMicrosoft Forms SpinButtonというやつになります。

こっちを選びましょう。

で、フォーム上で適当にドラッグなりクリックなりします。
大きさはマウス操作で変更できるので、いろいろ動かしてみてください。
で、お好きなところにテキストボックスも作ってください。

さらにカッコよく・・・ということなら、外側を透明&立体の四角形で囲むのがお勧めです。


これが大切。名前です。
まずスピンボタンの方のその他のプロパティを見てください。
名前は恐らく「ActiveXなんたら・・」という名前が付いていると思います。これをもうちっとわかりやすいものに変えておきましょう。
私は「スピンボタンくん」と付けました。

同じようにテキストボックスの方も名前を付けておきましょう。その方が後で値の代入をするときわかりやすいと思います。こっちは「テキストくん」と付けました。

で、後はうまいことスピンボタン内部のValueを、テキストボックスに移すようにマクロかコードを作れば完成。しかししかし、ここが恐らくActiveXの落とし穴。イベントプロパティには4つしかイベントが見当たりません。

ここであきらめず、ヘルプを見ましょう。
ちょっと見つけにくいですけれど、メニューバー[ヘルプ]→[トピックの検索]で、「コントロール」と入力すると、下の方にActiveXというのが出てきます。これを選ぶとOLEプログラムID(ActiveXコントロール)というのが出てきますので、これを見てみましょう。
一覧の中にスピンボタンがありますので、詳細を見てください。

上の方に「イベント」というタグがあるので、これをクリックします。SpinDown、SpinUpというイベントがあると思います。
これこれ、これが使いたいんですよね。

Valueが減ったり増えたりするイベントです。
んー、プロパティシートに出てくれればいいのに。。。

そんなわけで直接使えないので、とりあえずスペルを確認しておいてください。
で、ヘルプを閉じてスピンボタンのイベントに戻ります。
私はとりあえず「更新時」のイベントのところで、コードビルダを使いました。

Private Sub スピンボタンくん_Update(...)

となっているところをむりやり

Private Sub スピンボタンくん_SpinDown(...)

に書き換えます。まあ、終わりよければすべてよし。

で、後はその下に、値の代入をするステートメントを1行書きます。

Me![テキストくん] = Me![スピンボタンくん].Value

同じように、SpinUpのイベントも作ればOK。


スピンボタンなんか作らなくても、直接テキストボックスに数値を入力すれば事足りますから、これはAccessのフォームにちょっとした遊び心を加えるためのアイテムだと考えるべきじゃないかと思います。画面の中にちょっと変わったボタンがあると、クリックしたくなりますよね。人にやさしいフォームを作ることが出来るかもしれません。
楽しい仕掛けに使えるといいですね。活用してみてください。