<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 Access97 VBAの森>クラスモジュール



(2)

他にもいろんなパターンが作れますね。例えば、

こんなふうに、指定した日付が何曜日か、曜日を返すような式を考えてみましょうか。
これには、format関数がとっても役に立ちます。日付時刻型の値から、
曜日を出すためには、小文字のaを3つか4つ、下のように書き込むだけでOK。
Fomat関数っていろんなことができて便利ですから、ヘルプを参考にしてぜひ活用してみてください。

Private Sub テキスト1_AfterUpdate()

Me![テキスト3] = Format(Me![テキスト1], "aaaa")

End Sub

と、テキスト1の方に、スラッシュ区切りでなんか日付を入力します。
みなさんの誕生日でもなんかの記念日でもなんでもいいですよ。
未来の日付にも、7〜8年先くらいならちゃんと対応してくれますので、曜日を知りたい日を入力してEnterしてみてください。


まあ、よく見るとどれも

[テキストボックスなど]=式とか関数とか、どっか他のテキストボックスの中の値とか

という構文になってること、おわかりいただけますか?右側に書いたものの中に、左側のものを代入しているんですね。

これは、いわゆるマクロでいうところの「値の代入アクション」というやつで、別にこんなのを書かなくても、テキスト1の更新後処理の欄に、値の代入をするマクロを作ったっていいんですよ。おんなじことです。
ただ、値の代入をするだけのマクロをわざわざいっこ作るより、この1行の書き方に慣れて、1行だけコードビルダを使って入力した方が、なんか手軽な感じしません?

それと、Me!っていう書き方は、マクロではデキマセン(よそですからね)ので、forms![フォーム名]........って書かないとならないんですよね。これも積もり積もれば結構な労力。

ほんのチョットの処理なら、マクロをわざわざ作るよりもラク・・・という感覚で、VBAを用いることだってあるのです。


テーブルから値を取ってきてみましょうか。こんなテーブルがあったとします。

ただ、テーブルの中から特定の値を探してくるだけなら、Dlookupという関数がいいかもしれません。

Private Sub テキスト1_AfterUpdate()

Me![テキスト3] = Dlookup("氏名", "名簿テーブル", "[学籍番号]='" & Me![テキスト1] & "'")

End Sub

と、こんなふうに、入力した学籍番号から該当する氏名を、名簿テーブルから取り出して、テキスト3に代入してくれるわけです。

記述はちょっぴりめんどうですけれど、なかなかこの関数も使えそうです。

もし、「指定した成績の学生のかせぎの合計はいくらか」なんて値を取ってきたいときは、Dsum関数なんかいいですね。こんな感じになります。

Private Sub テキスト1_AfterUpdate()

Me![テキスト3] = DSum("かせぎ", "名簿テーブル", "[成績]='" & Me![テキスト1] & "'")

End Sub

さらに、テキストボックスに入力した金額より「かせぎ」のある人の数は???という場合は、DCount関数が役に立つでしょう。

Private Sub テキスト1_AfterUpdate()

Me![テキスト3] = DCount("かせぎ", "名簿テーブル", "[かせぎ]>=" & Me![テキスト1])

End Sub

と、2000円以上稼いだ人は、35人いる、ということがわかるわけです。

上のフォームじゃわけわかんないですが、もうちょっと体裁よく作れば・・・
こういう構文も何かに利用できそうですよね。


条件によって処理を分岐するやり方も、カンタンに作れます。
テキスト1の入力内容によって、テキスト3の方に異なるメッセージを表示したい場合は、こんな感じにするとよいでしょう。

例えば、テキスト1の中身が1000より多かった場合と、それ以外の場合で言葉を変える場合は、

Private Sub テキスト1_AfterUpdate()

If Me![テキスト1] > 1000 Then

Me![テキスト3] = "千円より多いしー"

Else

Me![テキスト3] = "お金ないしー"

End If

End Sub

こんな感じで、Ifというステートメントを使って処理を分岐させることができます。
赤い文字が「条件」、青い文字が「条件を満たした場合にやること」、緑の文字が「条件を満たさなかった場合にやること」です。
式の書き方は、ごくごくふつうの式なので、そんなに難しくはないと思いますよ。

条件による分岐が3つ以上ある場合は、Select文が役に立つでしょう。

Private Sub テキスト1_AfterUpdate()

Select Case Me![テキスト1]  '------テキスト1の中身によって、処理が分かれます。

Case Is > 50000    '--------------テキスト1が50000より多かったら
Me![テキスト3] = "上等"  '-----------テキスト3に"上等"と代入します。
Case 20000 To 50000  '------------テキスト1が20000から50000の間だったら
Me![テキスト3] = "いいじゃん"
Case 5000 To 20000
Me![テキスト3] = "標準"
Case 200 To 5000
Me![テキスト3] = "問題あり"
CaseIs < 200
Me![テキスト3] = "やる気あんのか"

End Select

End Sub

こんな感じですね。
テキスト1に入力した値に対して、該当するメッセージがテキスト3に代入されるはずです。


マクロの「値の代入」でも同じことができるんですが、処理の分岐などはマクロの場合は書き方がとても複雑になるので、これはVBAで記述した方が手軽です。

後はですねぇ・・・。テキストボックスに値を代入するんじゃなくて、テキストボックスとかフォームのプロパティに値を代入する方法、みなさんもよく使われるんじゃないでしょうか。

例えば、フォームの色変えてみましょうか。色は書式プロパティの「背景色」というところの数字がすべてを左右します。
例えば、これはどうやらスタンダードなグレーの色を表してる数字のようです。書きとめておきましょう。

いろいろフォームの色を変えてみて、それぞれどの色がどういう数値なのか、確認しておきます。ふむ、赤は255なのね。。。

テキストボックスに入力した「色」によって、フォームの色を変えるようなプロシージャを書いてみました。

Private Sub テキスト1_AfterUpdate()
Select Case Me![テキスト1]
Case "赤"
Me.Section(0).BackColor = "255"
Case "青"
Me.Section(0).BackColor = "16711680"
Case "黄色"
Me.Section(0).BackColor = "65535"
Case Else
Me.Section(0).BackColor = "12632256"
End Select
End Sub

Case Elseというのは、それ以外の場合という意味ですね。他の単語が入力される可能性、あるじゃないですか。
間違ったりすることもあるし。赤って入力しようと思って垢って入力しちゃうかもしれないですもんね。

それ以外の場合のことを常に考えるのも、VBAを使う上で大切なことです。

わはは〜。色、変わります???こういうのがまんず、クラスモジュールの基礎になります。
いろいろ作ってみて、イベントとVBAの記述との関連がどんな風になるのか試してみてください。