レコード表示に関しての続き
あぁぁ、連日なんか体が痛い。そして眠い・・・(^^;
#やはりあんまり遅くまでチャットをやっていてはいけないのね。
さて本題。
前回は、レコード表示部分についての規則を明確にするトコまでやりました。
今回はそれを踏まえまして、残りの処理を書いていくことにいたしましょう。
で、とりあえず「新規登録」の仕様として、5番目の項目を追加しておいて下さい(^^;)
----------------------------------------------------------------------------------
◆「新規登録」 オプションボタン クリック時
1.表示を On の状態にし、「修正/削除」オプションボタン表示を Off にする
2.「修正」「削除」「次のレコードに移動」「前のレコードに移動」の各ボタンをクリック
不可の状態に設定する
3.「登録」ボタンをクリック可能な状態にする
4.表示中のデータをクリアする
5.全レコード件数・現在のレコード位置の表示を更新する
----------------------------------------------------------------------------------
「新規登録」「修正/削除」モード切替処理におきまして、足りないのは「レコード表示」の
処理だけですよね。それではこの部分の処理を書いていくことといたしましょう。
まずは「全レコード件数」をどう表示するか。
これは第一部の方でやりましたけど、"隣接するセルの範囲を取得して、その行数を数える"と
いう方法を使います。
おさらいしますと、隣接する範囲を求めるのが CurrentRegion 、その中の行を示すのが Row 、
そして数を数えるのが Count になります。
※この辺についての詳しい解説については「変動するデータへの対応(その1)」の章をご
一読下さい。ここでは割愛致します。
そして"見出し部分"に隣接するセル範囲を取得して、変数に入れるわけですから、
LngAllRecCnt = Range("A1").CurrentRegion.Rows.Count
となります。でもこのままだと"見出し行"の部分も1件として数えてしまってますから、
その行数分を引いて
LngAllRecCnt = Range("A1").CurrentRegion.Rows.Count - 1
とすると、"登録済のレコード件数"が求められますね。
ここではあくまで"登録済のレコード件数"を変数に入れていることに注意して下さい。
表示する上での数値は、この値を基準に求められますので。
どういうことかと言いますと、前回定義しました
・全レコード件数 →登録済レコード件数(「登録」モードの場合は、登録待機中のレコード
1件もプラスしてカウントする)
という部分に関わってくるということです。
「修正/削除」モード中は、純粋に"登録済"の件数を表示すればいいのに対し、「新規登録」モー
ド中はその件数に登録待機分の1件をプラスする必要がありますので、まずは"登録済"分を変数に
入れておいて、「新規登録」モード時には
LngAllRecCnt + 1
としてやれば、希望通りの値が表示できるわけです。
----------------------------------------------------------------------------------
次に「現在のレコード番号」の表示について。
「変数 LngRecRow の値そのままでOKです」
・・・といきたいところですが、そうはいかない事情があります。それはなぜか。
「モード切替時に追加(編集)対象のレコード番号が変わってしまう」からです。
例えばどういうことかと言いますと、仮に現在5件のレコードが登録済だったとします。
そして「前のレコードに移動」で2番目のレコードに戻り、2番目のレコードを修正しました。
そしてその直後にレコードを新規登録すべく、「新規登録」モードに切り替えました。
---- としますと、切替をした時点で全レコード件数は6件(登録待機分含む)となり、追加する
行位置(レコード番号)もそれに合わせて"6番目"にならなければいけないからです。
そして今度は、その状態から再び「修正/削除」モードに切り替えることを考えますと、そのまま
「6件目/全6件」ではマズイですよね(^^;)
なぜなら「新規登録」モード時に表示されるレコード番号及び全件数は"未登録"のレコードを含ん
でいますから。つまり「6件目/全6件」と表示されている場合、実際の登録済件数は"5件"。
修正・削除の操作は"登録済レコード"に対してしか実行できませんから、新規→修正/削除モード
の切替時には最低限"編集可能なレコード位置"に合わせてやる必要があります。
"編集可能なレコード位置"を考えた場合、とりあえず無難なのは"登録済レコードの最終番号"に
合わせてやることです。
つまり「新規登録」モード時に「6件目/全6件」の表示であれば、「修正/削除」モードに切り替
えた際に「5件目/全5件」にする、ということですね。
逆に「修正/削除」→「新規登録」モード切替時には、「1件目/全5件」でも「3件目/全5件」
でも「5件目/全5件」でも、「6件目/全6件」に表示を切り替えるということです。
この関係、お分かりいただけましたでしょうか?(^-^;
実際の処理は
◆「修正/削除」→「新規登録」切替時(OptAddMode_Click)
・"現在のレコード番号"・・・登録済レコード件数+1
・"全レコード件数"・・・・・ 〃
◆「新規登録」→「修正/削除」切替時(OptUpdMode_Click)
・"現在のレコード番号"・・・登録済レコード件数
・"全レコード件数"・・・・・ 〃
となればいいわけですから、
◆「修正/削除」→「新規登録」切替時(OptAddMode_Click)
・"現在のレコード番号"・・・LngAllRecCnt + 1
・"全レコード件数"・・・・・LngAllRecCnt + 1
◆「新規登録」→「修正/削除」切替時(OptUpdMode_Click)
・"現在のレコード番号"・・・LngAllRecCnt
・"全レコード件数"・・・・・LngAllRecCnt
となります。
とりあえず今回はここまで~(^^)/~
|
|
TOP > VBAでラクしたい ~Part 2~
|