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

VBAでラクしたい ~Part 2~

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

続けて登録できるようにしてみよう

とりあえずは、データを1件登録するところまでこぎつけたわけですが、今度は
連続してデータを入力できるようにしたくなってくるわけです。

ここで連続入力処理の動きをチョットだけ考えてみましょう。

まずは起動
    ↓
入力位置の初期化
    ↓
データ入力
    ↓
登録ボタンクリック
    ↓
データ登録

と、ここまでが前回までに書いた処理ですが、このままですと何回ボタンをクリ
ックしても2行目のデータが変わるだけですよね。それはなぜでしょう?

それは「最初に決めた入力位置から変化していないから」ですね。

確かに、列位置も行位置も初期状態のまま、変化させるような処理を書いており
ません。この場合は新しいデータをどんどん下に追加していきたいわけですから

"入力行位置を下に1ずつ移動させればいい"

ということに気づきます。

なーるほど。じゃあデータ登録の次に

    ↓
データ登録
    ↓
入力行位置の移動(下に+1)

とすればいいのか、となるわけです。

確かにこれだけでも間違いではありませんが、チョット考えてみましょう。

新規でデータを追加するときって、大体は画面がまっさらな状態から入力します
よね。先程の状態ですと、登録をクリックしてもテキストボックスに入力された
値はそのまま保持されています。もちろん仕様としてそのような形を採用する場
合もありますが、ここでは "データが1件登録される毎にテキストボックスを
クリアする" という仕様にしてみましょう。そうすると


    ↓
データ登録
    ↓
入力行位置の移動(下に+1)
    ↓
テキストボックスのクリア

てな感じになればいいでしょう。では、やってみましょうか。

現在の行位置を下に1ずらすわけですから、現在の行位置を示す変数に1をプラス
すればいいことになります。したがって

'*** 行位置を下に移動 ***
LngRecRow = LngRecRow + 1

となります。

次にテキストボックスの値をクリアしたいわけですから、Textプロパティに対して
"" を入れてやればいいですよね。

'*** テキストボックスの値クリア ***
TxtName.Text = ""
TxtEmail.Text = ""
TxtBirthday.Text = ""

さて、ここまで書いたところで実行してみましょうか。
フォームからデータを入力して、登録をクリックしてみて下さいまし。


・・・・変わらない。

確かにテキストボックスの値はクリアされるけど、データが下に追加されない【汗】

なぜだか分かりますか?

ここまで書いたコードの一覧を掲載しておきますね。

Private Sub CmdTouroku_Click()
    
    '*** データ列の定義 ***
    Const cNameDataCol = 1  '氏名
    Const cMailDataCol = 2   'メールアドレス
    Const cBirthDataCol = 3  '誕生日
    
    '*** 起動時のレコード行位置 ***
    Const cInitRow = 2

    '*** レコード行位置 ***
    Dim LngRecRow As Long

    '*** 行位置の初期化 ***
    LngRecRow = cInitRow
    
    '*** データ登録処理 ***
    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


このコードを上から順に追っていって、どこが原因なのかを突き止めてみましょう。


#その答は次回に!(( ((( ヽ(;^^)ノ


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