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

VBAでラクしたい ~Part 2~

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

初期化処理

さぁいよいよ今回は初期化処理ですね。

ここまで一通り書けば、とりあえずのキホンといいますか、どんな感じで処理を組みたてていけば
いいのかという概要がつかめると思います。

あとは出来上がったものを動かしてみて、「ここはこうした方が使いやすいなぁ~」とかいう部分
について、修正を加えていけばいいわけです。

では本題

初期化処理の仕様について、もう一度見てみましょう。
-------------------------------------------------------------------------------------
◆「FrmDataInput」フォーム 起動時
・現在のレコード位置を初期化
・全レコード数を検出
・モードを「修正/削除」にする
・初期レコードを表示(1件も存在しない場合は空白表示)
-------------------------------------------------------------------------------------


ではこれに基づいて Private Sub UserForm_Initialize() の中に処理を書いていってみましょう


"現在のレコード位置を初期化" ということですから、初期値とする定数を現在のレコード位置を
示す変数に代入してやればいいわけですね。なので


    '*** 行位置の初期化 ***
    LngRecRow = cInitRow

となります。


続いて"全レコード数を検出"という処理。

これは全レコード数を数えて、レコード数を表示するところまでで1つの処理となります。
もう既に何度か他の処理で書いてますよね。 d(^-^ )
これもそのまま流用できますので


    '*** 登録済のレコード件数取得(見出し行分除く) ***
    LngAllRecCnt = Range("A1").CurrentRegion.Rows.Count - 1
    '*** 表示用レコード数を変数にセット ***
    LngCurRecNumDsp = LngAllRecCnt   '現在のレコード番号
    LngAllRecCntDsp = LngAllRecCnt   '全レコード件数

    '*** レコード件数表示 ***
    TxtRecCnt.Text = LngCurRecNumDsp & "件目/全" & LngAllRecCntDsp & "件"


でいいでしょう。


そしてモードの切替ですね。

オプションボタンのON/OFFを切り替えるには、オプションボタンのValueプロパティに True/False
を入れてやればいいことは、既に説明済。よって、


    '***「修正/削除」モードに切替 ***
    OptUpdMode.Value = True


となります。


最後にレコードの表示ですが、注意すべき点は"レコードが0件だったら空白を表示"というとこく
らいですね。ここの条件判断を忘れて、見出し行とかが表示されないようにしましょう。


    '*** 現在行位置が見出し行位置と同じ場合(レコード数ゼロ)
    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



とまぁこんな感じです。え?アッサリしすぎてます?(^^;)

この辺については、もうほとんど説明しちゃってますからねぃ。取りたててどうこういう部分は無
いのですよ。

というわけで、初期化処理部分の全コードは

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

Private Sub UserForm_Initialize()
    
    '*** 行位置の初期化 ***
    LngRecRow = cInitRow

    '*** 登録済のレコード件数取得(見出し行分除く) ***
    LngAllRecCnt = Range("A1").CurrentRegion.Rows.Count - 1
    '*** 表示用レコード数を変数にセット ***
    LngCurRecNumDsp = LngAllRecCnt   '現在のレコード番号
    LngAllRecCntDsp = LngAllRecCnt   '全レコード件数

    '*** レコード件数表示 ***
    TxtRecCnt.Text = LngCurRecNumDsp & "件目/全" & LngAllRecCntDsp & "件"


    '***「修正/削除」モードに切替 ***
    OptUpdMode.Value = True


    '*** 現在行位置が見出し行位置と同じ場合(レコード数ゼロ)
    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

End Sub

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

となりました。


いかがでしたでしょうか? 入力フォームの作成を通して、VBAというものに対しての理解は深
まりましたか?(^-^)

などとエンディングめいたことを書いてますけど、ここで終わるわけではないですよ(^-^;A

一応の区切りとしてですので・・。


これまでご説明申し上げた内容で、そっくりそのまま作成されていることとは思いますが、念のた
めここまで出来上がった状態のxlsファイルをUPしておきますヽ(^-^ )

ファイルはLzh形式で圧縮しておりますので、解凍ソフト(Lhasaなど)で解凍しお試し下さい。
※Excel2000で開けるかは試しておりません(^-^;)

尚、このファイルは圧縮前・後に Norton AntiVirus Ver5.00.00 にてウイルスチェック済ですが、
100%の安全を保証するものではございません。ご使用の場合はあくまで自己責任にてお願い申し上
げます<(_ _)>


form01.lzh(Excel97形式 23.1KB)


それでは次回までごきげんよぉ~(^^)/~


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