シートへの連続入力とテキストボックスの解説
動画でExcel UseFormシートへの連続入力とテキストボックスの解説
【VBAユーザーフォーム】基礎編第3回 UseFormシートへの連続入力とテキストボックスの解説、オブジェクト名の変更、 ユーザーフォームの必須ワザを紹介、Excel塾のエクセルマクロ講座中級編
動画版「ユーザーフォーム講座」です。
前回はユーザーフォームのテキストボックスに入力した値を、コマンドボタンをクリックすることでシートに転記しました。複数の値を転記する場合に、ユーザーがすでに入力した値を選択して消してやってという作業が面倒です。
そこで、Enterキーを押して値をセルに入力したら、自動的に元の値が消えてくれたら便利です。
マクロ動画 UseFormシートへの連続入力とテキストボックスの解説
テキストボックスにフォーカスを戻す
Enterキーを押して値をセルに入力したら、フォーカスをテキストボックスに戻して、元の値をクリアするまでを自動で行う処理。
それにはSetFocusメソッドを使います。
ユーザーフォームとコードのウィンドウを複数表示させるには、
メニューの ウィンドウから、上下に並べて表示や左右に並べて表示を選択すると複数のウィンドゥを表示させることができます。
これは上下に並べましたが、左右に並べてもいいです。皆さんの見やすいように並べ替えてくださいね
このコマンドボタンをクリックした時に転記されるというコードが以下の、
Private Sub CommandButton1_Click()というコードですね。
こちらは Dim lastR As Long
lastR = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
というコードで最終行を取得して、その最終行の2列目に値を入れているというコードなんですね。
Private Sub CommandButton1_Click() Dim lastR As Long lastR = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row Cells(lastR + 1, 2).Value = txt金額.Value txt金額.SetFocus txt金額.Value = "" End Sub
その次に、txt金額.SetFocus というコードを追加して、テキストボックスにフォーカスを戻してやります。
txt金額.Value = "" というコードで、バリューに対して、それをなしにするというコードになります。
オブジェクト名をわかりやすい名前変更
上記のコードでは、デフォルトの名前のままCommandButton1でコードを書いていますけれども、 このCommandButton1ってこれからコマンドボタンを追加する際にどれかどれだか区別するのにとてもわかりずらいのです。 もっとわかりやすい名前にしておいた方が後々楽ということが多々あります。 オブジェクト名を"btn_input" に変更しておきました。
終了ボタンも名前を変更しておきます。
フォームを起動します。すると金額を入力というのが出てきましたね。 では14000円と入力してエンタキーを押します。フォーカスがコマンドボタンに移動します。
もう1度エンターキーを押すと、コマンドボタンが押されたことになり、シートに転記されて、自動的に、フォーカスがテキストボックスに戻って、値が消去されました。
確認するとつまり、1回目のEnterキーでテキストボックスから、下のコマンドボタンにフォーカスが移動する。2回目のEnterキーで、シートに入力するというコードが発動する。
CommandButtonのDefaultプロパティとは
現在のコードと設定では、入力の際にエンターキーを2回押す必要がありましたが、
2回押すのは、量が多いと大変な作業になります。
CommandButtonには、デフォルトというプロパティがありますけれども、意味はEnterが押された時の動作をどうするかということになります。
これが 初期値がフォールスになっています。
これをTrueに変えてやります。
Trueの意味は これは
改行キー(Enterキー)が押されたら、
このボタンインプットが押されたことと同じくするよとていう意味になります。
すると、テキストボックスでEnterキーを押したら、
即それは入力用の入力用のbtn_inputを押したことになるわけです。
それからテキストボックスのIMEModeを使いやすい設定に変更しておきましょう。 テキストに入力する文字列が分かっている場合は、それがすぐ使えるようにしたいと思います。 IMEモードで設定します。初期値はノーコントロールなんですけれども、今回は数値を入れることがわかっていますから、 IMEモードを これを 3-fmIMEModeDisableにしたいと思います。
他にも IMEモードがありますからその時によって使い分けてください。 例えばユーザーのお名前とか振りがなとかを入れるときには、半角カタカナとか全角カタカナとか、使用してほしいモードに設定しておきます。
IMEモードプロパティの使い分け
ユーザーフォーム内で、 パスワードを入力してもらいたい時に、パスワードは他人に知られては困るものですから 外部から見えないようにしたいわけです。 そのようなときは、そんな時にパスワードを伏字にするという機能を使いたい。 そのような時に役に立つのがパスワードキャラクタープロパティーです。
またパスワードは半角英数字で入力しますから、IMEModeも8-fmIMEModeAlphaに設定しておきます。
起動させて半角英数字でパスワードを入力してみましょう。ちゃんと伏字になっています。
入力できる文字数の最大値を設定したい時がある場合には、maxlength property というので指定します。 初期値は0 です。0というのはいくらでも入力できるという意味ですので、ここでは8にしておきましょう。 このような形で設定すると8文字以上は入力できません。
テキストボックスで、複数の行を入れたい場合はMultLineプロパティをトゥルーにしてやります。
フォームを起動してテキストを入力してみると、MultiLineがTrueになっているので、複数行を入力できました。