「登録」「前のレコードに移動」ボタンを仕上げる
オプションボタンの処理が出来上がってしまいましたので、今度は何から手をつけましょうか。
やっぱりもうほとんど出来上がってるものから、仕上げていくことにしましょう(^-^;
「登録」ボタンの処理は、もうここまで出来ていましたよね↓
-----------------------------------------------------------------------------------------
Private Sub CmdTouroku_Click()
'*** データ登録処理 ***
Cells(LngRecRow, cNameDataCol).Value = TxtName.Text
Cells(LngRecRow, cMailDataCol).Value = TxtEmail.Text
Cells(LngRecRow, cBirthDataCol).Value = TxtBirthday.Text
'*** 行位置を下に移動 ***
LngRecRow = LngRecRow + 1
'*** テキストボックスの値クリア ***
TxtName.Text = ""
TxtEmail.Text = ""
TxtBirthday.Text = ""
End Sub
-----------------------------------------------------------------------------------------
あとはコレに足りないものは「レコード件数表示」の部分だけです。
では、やってみましょう。
'*** データ登録処理 ***
'*** 行位置を下に移動 ***
'*** テキストボックスの値クリア ***
と順にきてますね。この後に処理を書くということは、この時点で"新しいレコードは登録済"の状
態ですよね。ということは、この時点で数えたレコード件数(見出し行分は除く)が"純粋な全レコ
ード件数"ということになります。
そして「新規登録」の場合は必ず"登録済件数 + 1"を示しますから
-----------------------------------------------------------------------------------------
'登録済のレコード件数取得(見出し行分除く)
LngAllRecCnt = Range("A1").CurrentRegion.Rows.Count - 1
'表示用レコード数を変数にセット
LngCurRecNumDsp = LngAllRecCnt + 1 '現在のレコード番号
LngAllRecCntDsp = LngAllRecCnt + 1 '全レコード件数
'レコード件数表示
LblRecCnt.Caption = LngCurRecNumDsp & "件目/全" & LngAllRecCntDsp & "件"
-----------------------------------------------------------------------------------------
の処理を追加すれば良いことになります。
従って
-----------------------------------------------------------------------------------------
Private Sub CmdTouroku_Click()
'*** データ登録処理 ***
Cells(LngRecRow, cNameDataCol).Value = TxtName.Text
Cells(LngRecRow, cMailDataCol).Value = TxtEmail.Text
Cells(LngRecRow, cBirthDataCol).Value = TxtBirthday.Text
'*** 行位置を下に移動 ***
LngRecRow = LngRecRow + 1
'*** テキストボックスの値クリア ***
TxtName.Text = ""
TxtEmail.Text = ""
TxtBirthday.Text = ""
'*** 登録済のレコード件数取得(見出し行分除く) ***
LngAllRecCnt = Range("A1").CurrentRegion.Rows.Count - 1
'*** 表示用レコード数を変数にセット ***
LngCurRecNumDsp = LngAllRecCnt + 1 '現在のレコード番号
LngAllRecCntDsp = LngAllRecCnt + 1 '全レコード件数
'*** レコード件数表示 ***
LblRecCnt.Caption = LngCurRecNumDsp & "件目/全" & LngAllRecCntDsp & "件"
End Sub
-----------------------------------------------------------------------------------------
で、いいですよねヽ(^-^ )
これも動作を確認してみて下さい。ちゃんと一番最後の行の下にレコードが追加されますか?
レコードを追加した後に「修正/削除」モードに切り替えた時、今入力したレコードが表示されま
すか?
私の方も特に動作は問題無さそぉでしたので、次いきます(^^;)
それでは次に、これまた作りかけ状態でした CmdPrev_Click の方を仕上げていきましょうか。
一応、仕様を確認しておきますけど
-----------------------------------------------------------------------------------------
◆「前のレコードに移動」ボタン クリック時
1.現在位置よりも1つ前にレコードが存在するか調べる
2.存在する場合は現在位置の変数を -1 し、該当するレコードを表示する
3. 〃 現在のレコード位置表示を更新する
4.存在しない場合はそのまま現在のレコードを表示する
-----------------------------------------------------------------------------------------
ということで、1,2,4の処理までは既に作成しておりました
Private Sub CmdPrev_Click()
'*** 現在のレコード位置より1つ前 ***
If LngRecRow > cMidasiRow + 1 Then
LngRecRow = LngRecRow - 1
End If
'*** レコード表示処理 ***
TxtName.Text = Cells(LngRecRow, cNameDataCol).Value
TxtEmail.Text = Cells(LngRecRow, cMailDataCol).Value
TxtBirthday.Text = Cells(LngRecRow, cBirthDataCol).Value
End Sub
実際に動かしてみると、ちゃんと1つずつ前のレコードがフォームに表示されていきますよね。
そして見出し行の前(つまり先頭レコード)まで来たら、それ以上前は表示されないようにもなっ
ているはずです。
そうするとあと足りないのは3の処理だけですので、この処理を追加しましょう。
まずは"全レコード件数"を調べる必要がありますよね。これを調べるのは
'*** 登録済のレコード件数取得(見出し行分除く) ***
LngAllRecCnt = Range("A1").CurrentRegion.Rows.Count - 1
であることは前に書いた通りです。ここでもこれを流用できますヽ(^-^ )
そうしますと表示用の変数への代入も
'*** 表示用レコード数を変数にセット ***
LngAllRecCntDsp = LngAllRecCnt '全レコード件数
で、いいことになりますよね。この辺は大丈夫ですか? d(^-^ )
そして"現在のレコード番号"はどうやって取得すればいいでしょうか。
"現在のレコード行位置"を示している変数は LngRecRow ですよね。これは"見出し行"分を含めて
カウントされた値が入っていますから、例えば2行目に入っているレコードのレコード番号は1に
なりますし、3行目は番号2になります。
ということは
LngRecRow - 1 (見出し行分) ・・・現在のレコード番号
となります。従って
LngCurRecNumDsp = LngRecRow - 1 '現在のレコード番号
となればいいことになりますね。あとは
'*** レコード件数表示 ***
LblRecCnt.Caption = LngCurRecNumDsp & "件目/全" & LngAllRecCntDsp & "件"
を後ろにくっつければレコード表示はOKですから、ここまでをまとめると
'*** 登録済のレコード件数取得(見出し行分除く) ***
LngAllRecCnt = Range("A1").CurrentRegion.Rows.Count - 1
'*** 表示用レコード数を変数にセット ***
LngAllRecCntDsp = LngAllRecCnt '全レコード件数
LngCurRecNumDsp = LngRecRow - 1 '現在のレコード番号
'*** レコード件数表示 ***
LblRecCnt.Caption = LngCurRecNumDsp & "件目/全" & LngAllRecCntDsp & "件"
となります。これを追加した処理はこんな感じになりますね。
-----------------------------------------------------------------------------------------
Private Sub CmdPrev_Click()
'*** 現在のレコード位置より1つ前 ***
If LngRecRow > cMidasiRow + 1 Then
LngRecRow = LngRecRow - 1
End If
'*** レコード表示処理 ***
TxtName.Text = Cells(LngRecRow, cNameDataCol).Value
TxtEmail.Text = Cells(LngRecRow, cMailDataCol).Value
TxtBirthday.Text = Cells(LngRecRow, cBirthDataCol).Value
'*** 登録済のレコード件数取得(見出し行分除く) ***
LngAllRecCnt = Range("A1").CurrentRegion.Rows.Count - 1
'*** 表示用レコード数を変数にセット ***
LngAllRecCntDsp = LngAllRecCnt '全レコード件数
LngCurRecNumDsp = LngRecRow - 1 '現在のレコード番号
'*** レコード件数表示 ***
LblRecCnt.Caption = LngCurRecNumDsp & "件目/全" & LngAllRecCntDsp & "件"
End Sub
-----------------------------------------------------------------------------------------
いかがでしょうか。実行したらその通りに動きましたか?(^^ ?)
書いたコードをそのまま流用できてしまいますので、今回はだいぶラクでしたよね。
LngRecRow から見出し行分の1を引くとか、その辺さえ間違わなければ正しい動きはしてくれたは
ずです。
う~む、今回は特にバグなど出ないような展開だったから、やたらとスマートな内容になってしま
った感がありますねぃ(^^;)
やはりここは多少なりともつまづきながらいった方が、私らしくていいかも。
#なのか? (^_^;
それでは次回までごきげんよぉ~♪(^^)/~
|
|
TOP > VBAでラクしたい ~Part 2~
|
|