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

VBAでラクしたい ~Part 2~

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

入力データの表示

これで「登録」ボタンをクリックする毎に、データが次々と登録されていく処理が
できました。

次に何が必要になってくるでしょう?

今のフォームは、データをひたすら新規登録するだけの機能しか持ち合わせておりません。
入力データも当然フォームから編集したりしますよね? そのために必要な機能を順番に
付けていくと致しましょうか(^-^

まずフォームから編集するためには、データを表示せねばなりませんね。

お気づきの方もいらっしゃると思いますが、入力フォームを起動した時に入力開始位置は
決まっています。見出しの次の行、2行目からでしたよね? d(^-^

にもかかわらず、フォームには何もデータが表示されていません。

やはりここは、入力対象とされている行のデータが表示されてしかるべきでしょう。
ということで「入力開始位置に入っているデータを表示する」ところからやってみること
にしましょうね d(^-^ )


まず「フォームを起動時」に入力開始位置に入っているデータを表示させたいわけですか
ら、どこに処理を書けばいいかはおわかりですよね?(^o^ )

答は Private Sub UserForm_Initialize() です。

これがわからなかった方は、ここをもう一度読み直しましょう
#で、いいのか?(^_^;

で、今度は"セルの値をフォームに表示"させたいわけですが、ここでチョット注目。

    '*** データ登録処理 ***
    Cells(LngRecRow, cNameDataCol).Value = TxtName.Text
    Cells(LngRecRow, cMailDataCol).Value = TxtEmail.Text
    Cells(LngRecRow, cBirthDataCol).Value = TxtBirthday.Text

これってテキストボックスの値をセルに入れる処理でしたよね。
なんとなく「コレの逆をやればいいんじゃないか」と気づいた貴方はスルドイ。

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

    '*** データ初期表示処理 ***
    TxtName.Text = Cells(LngRecRow, cNameDataCol).Value
    TxtEmail.Text = Cells(LngRecRow, cMailDataCol).Value
    TxtBirthday.Text = Cells(LngRecRow, cBirthDataCol).Value

End Sub

メチャメチャ安易だとお思いでしょうが(^-^;)まずはこの通りに入力して実行してみませう。

いかがでしょ? エラーが出ましたね(( ((( ヽ(;^^)ノ

ホントはこのバグについても、すぐ回答を書かない方が勉強になるかなーとは思うのですが、
「この答は次回!」とするには、まだ短すぎるし・・・・(^^;)

ヒントは・・・「マウスカーソルを近づけてみましょう」

エラーの原因にウスウス感づいたところで、次を読み進めて下さいまし(^-^;;;;




ってことで、列の定数が「Empty値」になってますよね。
なぜかといえば、これらの定数は Private Sub CmdTouroku_Click() の"ローカル"で定義
されてるから。

やっぱりこれらの定数も Private Sub UserForm_Initialize() で使いたいから、宣言場所
のお引越しをしましょう。引越し先はフォームモジュールの「General Decarations」という
ことで。



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

    
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


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

    '*** データ初期表示処理 ***
    TxtName.Text = Cells(LngRecRow, cNameDataCol).Value
    TxtEmail.Text = Cells(LngRecRow, cMailDataCol).Value
    TxtBirthday.Text = Cells(LngRecRow, cBirthDataCol).Value

End Sub


なんか結局、宣言は全部Generalになってしまったようで(^^;)

まぁ使い方が最初に決まっていれば、おのずとここに来るのはわかるわけですが、勉強のため
には多少の回り道も必要だったりします(( ((( ヽ(;^^)ノ

とにかく最初のデータをフォームに表示するまでは成功しました。
次回は表示するデータを前後に移動してみませう。


以上今回はここまで~♪(^^)/~


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