マクロでいこう! ~ Excel活用HomePage ~

VBAでラクしたい ~Part 2~

こちらのコーナーでは、VBAの使い方を中心にご紹介していきます。
作者自身の経験から書いておりますので、本とかとは違ったコトを
書いてるトコロもあるかもしれません。 そういう場合は、良さそうな方を信じましょう(^_^;
TOPVBAでラクしたい ~Part 2~ > げげっ( ̄▽ ̄; ラベルコントロールでは・・・

げげっ( ̄▽ ̄; ラベルコントロールでは・・・

またわけのわからんタイトルを付けてしまいましたがご容赦を(^^;)

というのはですね、前回の続きでボタンの使用可・不可切替処理を書こうと思ってたんです。

で、その処理を書く場所として今回は新たに「Change」イベントをご紹介しようと。

コマンドボタンの使用可・不可はレコード件数によっても変化しますので、その切替タイミングと
しては、"ラベルコントロールの表示が変化したとき"が一番都合よかったわけです。
例えば全2件の状態から削除されて全1件になった場合とか、あるいは逆に1件から2件に増えた
とか。

要するに「Change」イベントっていうのは何かというと、「コントロール自身の値が変化した」と
いう状況に反応するもので、上記のような処理で使えるわけですね。

ところがいざラベルコントロールを見たら、「Change」イベントが入ってないときたヽ( ´ー`)丿

Excel2000ではどうか分かりませんが、これではとっても都合が悪い・・・。

例えばこの場合、件数表示での「Change」イベントを使わずに処理を書いたとすると、「登録」か
ら「次へ」まで5つのボタンそれぞれにレコード数を検出して云々の処理を書かねばなりません。

ラクするのが信条であるこのWebにおいて、そういう面倒臭いことはハッキリ"No!"と言わねばなる
まい。

ぢゃあ、どうすればいいの?ってことですが、下記の通りにやってみて下さいまし
#いわゆる修正になってしまいますが、これも新しいテクを学ぶためにも必要・・ってことで(^^;)


-----------------------------------------------------------------------------------------

まずはフォーム上にテキストボックスを貼ります。

おそらく TextBox1 とかいう名前になっていると思いますが、このオブジェクト名を TxtRecCnt に
修正して下さい。

次にこのコントロールをクリックして、プロパティを表示します。

今の状態ですと、普通に何か入力できそうな雰囲気が漂ってますよね(^-^;
なので、これを"にせラベル"に改造します。

BackColor というプロパティがあります。
ここをクリックして「メニューバー」を選択して下さい。
どうですか?フォームと同じ色になりましたよね d(^-^ )


んんん、でもまたこれではチョット違和感があります。

そこで今度は SpecialEffect をクリックして、値を 0 にします。
どうでしょう?へこみスタイルからフラットな状態になりましたよね(^^)


そして仕上げに TabStop を False にしておきます。
こうしておかないとEnterキーを押したときに、フォーカスが移動してしまいます(⌒_⌒;)


さてどうですか?見た目はラベルと変わらないですよねヽ(^-^ )

でもテキストボックスには変わりがないので、クリックすればちゃんと入力できてしまったりする
のですが・・・(( ((( ヽ(;^^)ノ

ただ仮に入力されて表示が消えても、何かボタンをクリックすれば更新されるからOKOK。
#なのか?(^_^;

こんな強引な方法は、市販のマニュアル本では解説してはいないでしょう(^-^;

でも結構VBとかでモノ作ってますと、わりと強引な手法も使ったりしますよ~。
#コンボボックスの上にテキストボックスをピッタリ重ねて、入力可能なコンボボックスを作った
#りとか・・・。


話を戻しますが。

ここまで出来ましたら、以前やりました「置換」の機能を使って

LblRecCnt.Caption  を  TxtRecCnt.Text

に全て置き換えて下さい。

以上の作業が終了したら、前に使っていた LblRecCnt のラベルコントロールは削除して結構です。


さ~て、これでChangeイベントが使用可能なラベルが出来ました。これをダブルクリックすると


Private Sub TxtRecCnt_Change()

End Sub


となりますので、あとはここにコードを書いていくだけです。

で、その書く処理については、前々章あたりにあるボタンの使用可・不可をまとめた表をもう一度
よく見て考えていきましょう。

(1)~(5)の関係表をよく見ていくと、まず「修正」と「削除」はどの場合でも同じ動きをしていま
すよね(「修正」が○ならば「削除」も○とか・・)。

ということはこの2つはセットで考えればいいということになります。

そしてこの2つが×になる条件は(1)だけ。あとは全て○です。

つまりこの2つのボタンに関しては切り替えるべき条件は1つ
「レコードは0件か、そうでないか」
ということです。


    '全レコード数が0件の場合
    If LngAllRecCntDsp = 0 Then
        CmdUpdate.Enabled = False      '修正(不可)
        CmdDelete.Enabled = False      '削除(不可)
    End If


あれっ?ボタンを使用不可にする処理しか書いてないけど、このままだと使用可に戻せないんじゃ
ないの?

とお思いの方もいらっしゃるかもしれませんが、これで大丈夫です(^^)


なぜかと言えば、この処理を通過してコマンドボタンが使用不可になったということは、レコード
が0件なわけですよね?
レコードが無ければ「新規」モードに切り替えて追加せねばなりません。そこでレコードを追加し
ます。そしてレコードが追加された後、「修正/削除」モードに切り替えますと OptUpdMode_Click
内に書かれた条件判断処理を必ず通過します。ここでレコードが1件以上あればボタンが使用可に
切り替わりますから、・・・・ ということでお分かりいただけましたでしょうか・ d(^o^

それぞれの処理の中で同じものがダブらないように書く、ということも注意すべき点の1つですね。


では明日は残りの部分について書きま~す


TOPVBAでラクしたい ~Part 2~
Copyright (C) 2006 マクロでいこう!. All Rights Reserved.