重複する処理はまとめませう
前回は関数の解説なぞをしてみましたが、今回は今まで書いたコードの整理をチョットやってみた
いと思います。
これまでに結構たくさんのコードを書きましたよね。
でも上からずーーっと順に眺めていってみてください。何か気がつくでしょうか。
間違いとかいうことではないんですが・・・。
そうです、よく見ると全く同じコードの集まりが何個所かありますよね。同じ処理を使いまわしで
きる個所が色々とありましたから、これは当然といえば当然ですね。
そこで一つ考えるわけです。
「まったく同じものであれば、一つにまとめてしまうことはできないか」と。
実は出来るのです。
方法はカンタン。"重複する処理部分を1つのSub処理にしてしまう"のです。
これまで書いてきたコードっていうのは"CmdAddNew_Click"とか"TxtRecCnt_Change"のように、
「イベントに対応した処理」ばかりでした。
ところが、Sub処理っていうのはイベントに対応しているものが全てというわけではなく、あくまで
一塊の処理を指すものですんで、処理中で汎用的に使うモノを作ることも出来るのです。
要は「共通で使える処理をひとまとめにしておいて、必要に応じて呼び出して使う」ことが出来る
んですねヽ(^-^ )
それでは実際にやってみましょう。まずは重複している処理を探すところから
・*** レコード表示処理 ***
・*** 空白表示処理 ***
これらは明らかに同じものですよね。
それと、コメント文が違っていますが
*** データ登録処理 ***
と
*** データ修正処理 ***
も、よく見ると同じです。
それではこの辺からまとめていきましょうか。
まずSub処理に名前をつける必要があります。
・*** レコード表示処理 ***
・*** 空白表示処理 ***
・*** データ登録・修正処理 *** → *** データ書込処理 ***
から私が考えた名前は
・RecShow
・NoRecShow
・DataWrite
です(^-^;
もちろん自分でお好きな名前に変えても大丈夫ですよ。
で、この名前を元にSub処理を用意します
Private Sub RecShow()
End Sub
とりあえず今は1つのフォームだけでやってますので、フォームモジュールの中に書いて構いませ
ん。
ただ、今後複数のフォームを扱うようになり、複数のフォーム間で共通で使える処理を書くってこ
とになれば
Public Sub RecShow()
End Sub
として、標準モジュール内に書くのが望ましいです。
そして後はこの中に処理を入れまして
Private Sub RecShow()
'*** レコード表示処理 ***
TxtName.Text = Cells(LngRecRow, cNameDataCol).Value
TxtEmail.Text = Cells(LngRecRow, cMailDataCol).Value
TxtBirthday.Text = Cells(LngRecRow, cBirthDataCol).Value
End Sub
とします。同様に他の2つも
Private Sub NoRecShow()
'*** 空白表示処理 ***
TxtName.Text = ""
TxtEmail.Text = ""
TxtBirthday.Text = ""
End Sub
Private Sub DataWrite()
'*** データ書込処理 ***
Cells(LngRecRow, cNameDataCol).Value = TxtName.Text
Cells(LngRecRow, cMailDataCol).Value = TxtEmail.Text
Cells(LngRecRow, cBirthDataCol).Value = TxtBirthday.Text
End Sub
としましょうヽ(^-^ )
そうしますと今までは
'*** 現在行位置が見出し行位置と同じ場合(レコード数ゼロ)
If LngRecRow = cMidasiRow Then
'*** 空白表示処理 ***
TxtName.Text = ""
TxtEmail.Text = ""
TxtBirthday.Text = ""
Else
'*** レコード表示処理 ***
TxtName.Text = Cells(LngRecRow, cNameDataCol).Value
TxtEmail.Text = Cells(LngRecRow, cMailDataCol).Value
TxtBirthday.Text = Cells(LngRecRow, cBirthDataCol).Value
End If
と書いていたものが
'*** 現在行位置が見出し行位置と同じ場合(レコード数ゼロ)
If LngRecRow = cMidasiRow Then
'*** 空白表示処理 ***
NoRecShow
Else
'*** レコード表示処理 ***
RecShow
End If
で済んでしまいます(^-^;A
このように処理を一通り書いてから、まとめられる部分をまとめるっていうやり方もありますが、
慣れてくれば設計の段階から、共通で使えそうな処理をピックアップできるようになるでしょう。
それでは次回までごきげんよぉ~(^^)/~
|
|
TOP > VBAでラクしたい ~Part 2~
|
|