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

VBAでラクしたい ~Part 2~

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

ボタンの使用可・不可の切替について整理する

前回の「修正」ボタンの処理で、"修正後次のレコードに移動"っていう処理を参考までに書きまし
たけど、とりあえず今回のシステムの中では取りいれないことにします(^-^;
#あくまで修正後もそのまま今のレコードを表示するってことで

なので、その部分はコードの先頭に ' をつけて、コメントアウトの状態にしておくと良いと思い
ます。

つまり

Private Sub CmdUpdate_Click()

    '*** データ修正処理 ***
    Cells(LngRecRow, cNameDataCol).Value = TxtName.Text
    Cells(LngRecRow, cMailDataCol).Value = TxtEmail.Text
    Cells(LngRecRow, cBirthDataCol).Value = TxtBirthday.Text
    
'    '*** 現在のレコード位置より1つ後 ***
'    If LngRecRow < LngAllRecCnt + 1 Then
'       LngRecRow = LngRecRow + 1
'
'       '*** レコード表示処理 ***
'       TxtName.Text = Cells(LngRecRow, cNameDataCol).Value
'       TxtEmail.Text = Cells(LngRecRow, cMailDataCol).Value
'       TxtBirthday.Text = Cells(LngRecRow, cBirthDataCol).Value
'
'       '*** 表示用レコード数を変数にセット ***
'       LngCurRecNumDsp = LngRecRow - 1  '現在のレコード番号
'
'       '*** レコード件数表示 ***
'       LblRecCnt.Caption = LngCurRecNumDsp & "件目/全" & LngAllRecCntDsp & "件"
'
'    End If

End Sub


こういう状態ですね。


さてさて前々回の課題として残されていた部分がありましたけれども、本日はその部分の修正に取
りかかるといたしましょう。

・・・とその前に

タイトルにも書きましたが、今回は「ボタンの使用可・不可の切替」について考えてみましょう。

「え?それは前にもやったじゃん」とお思いの方もいらっしゃるでしょう。確かにその通りです。

使用方法については説明済ですので、あとは"どのタイミングで処理する必要があるか"と"どのコン
トロールを対象にするか"の2点について再度考えてみましょう。

#実際、開発の現場でもこのような細かい動きに関しては、作ってから動作させてみてから気づく
#場合が多いです(^^;)仕様書に最初から全て網羅されているのが理想といえば理想なのですが・・


言い訳めいた余談はおいといて、まずは使用可・不可を切り替えるコントロールを列挙してみまし
ょう。ヽ(^-^;)

・CmdAddNew (登録)
・CmdUpdate (修正)
・CmdDelete (削除)
・CmdPrev   (前のレコードに移動)
・CmdNext   (次      〃        )

※以下の説明で ○ は使用可、× は使用不可を意味することとします


まずは「新規」モード時(OptAddMode_Click)と「修正/削除」モード時について

                新  規     修正/削除
・CmdAddNew       ○           ×
・CmdUpdate       ×           ○
・CmdDelete       ×           ○
・CmdPrev         ×           ○
・CmdNext         ×           ○


「新規」モード中はひたすら新規レコードを登録するだけですから、他のボタンは関係ないわけで
すよね。なので「新規」モード中はこの設定だけでおっけーとします。

問題は「修正/削除」モード中ですね。

(1)まずは「レコードが1件も無い場合」

・CmdUpdate       ×
・CmdDelete       ×
・CmdPrev         ×
・CmdNext         ×

これはもう「新規」モードに移って、まずはデータを入力せねばない状況なので、お分かりになり
ますよね(^-^;


(2)次に「レコードが1件だけ存在し、"1件目/全1件"の場合」

・CmdUpdate       ○
・CmdDelete       ○
・CmdPrev         ×
・CmdNext         ×

表示(登録)されているレコードは1件だけですから、前後には動けませんよね。


(3)次に「レコードが2件(あるいはそれ以上)存在し、"1件目/全2件"の場合」

・CmdUpdate       ○
・CmdDelete       ○
・CmdPrev         ×
・CmdNext         ○

現在位置の次にレコードが存在している場合は、「次の・・」が押せますよね。
先頭レコードを表示している場合は必ず CmdPrev は × になります。


(4)次に「レコードが2件(あるいはそれ以上)存在し、"2件目/全2件(最終レコード)"の場合」
・CmdUpdate       ○
・CmdDelete       ○
・CmdPrev         ○
・CmdNext         ×

現在位置の前にレコードが存在している場合は、「前の・・」が押せますよね。
最終レコードを表示している場合は必ず CmdNext は × になります。


(5)その他、上記に該当しない場合(例:2件目/全3件)

・CmdUpdate       ○
・CmdDelete       ○
・CmdPrev         ○
・CmdNext         ○

で良いのではないかと思われます(^-^;


もうここまで説明してしまえば、自力で書けちゃう方もいらっしゃるのでは?_φ(^-^ ;)

これを踏まえて自分なりに書いてみると、またこれも勉強になるわけです。>VBA


この続きはまた次回~♪(^^)/


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