Excel VBA UserFormのテキストボックスを使ってみる

「ユーザーフォーム」を使用するいろいろな方法について検討していきたいと思います。

今回は「テキストボックス」や「ラベル」の使い方と、「テキストボックス」に入力されたデータを使う方法について解説していきます。

下の過去記事で「パスワードの生成」をワークシート上で行っていました。そのコードを利用して「ユーザーフォーム」から入力設定する方法を付け加えてみたいと思います。

くるみこ
くるみこ

前回記事で「ユーザーフォーム」の作成について勉強しました。「テキストボックス」の文字列をセルに書き込む一例だけ紹介しましたが、今回はその「テキストボックス」についてもっと詳しく勉強しましょう(^^)/

「ユーザーフォーム」のこと少しだけわかってきました。引き続きよろしくお願いします!

【この記事でわかること
・ユーザーフォームに設置したテキストボックスの利用法
・テキストボックスに入力されたデータの使い方について
・ユーザーフォームからユーザー関数を利用する方法

前回記事のおさらいは、下のカードをクリックすれば開きます(^^ゞ

くるみこ
くるみこ

前回記事は、ユーザーフォームとはどういうものか。UserFormの基本的な作り方を解説しています。よければ覗いてみてね(^^)/

プロジェクトにユーザーフォームを挿入します

「SHA-256ハッシュ値からパスワードを生成する」プロジェクトにユーザーフォームを挿入します。

ユーザーフォームを設計します

挿入したユーザーフォームに使用するコントロールを配置していきます。

・まず最初に、ユーザーホームに配置するコントロールの種類や数を決めていきます。
・必要に応じて自由に後から変更できますので、基本の部分だけ決めていきましょう。
・パスワードを生成するために必要な要素は「記号」「定数」「文字列」の3つでした。
・3つの「テキストボックス」と見出しを付けるために、同数の「ラベル」も必要です。
・生成できたパスワード文字列(44文字)を表示するコントロールも必要です。
・今回は「テキストボックス」の使用法なので「テキストボックス」を使用することにします。
・使用する文字列の長さ等を調整する部分については、今回は省略します。
・「ユーザーフォーム」のタイトルを表示したいので「ラベル」を使います。
・「生成開始」と「終了」させるコマンドボタンも必要です。

下の画像がユーザーフォームにコントロールを貼り付けたものです。
「テキストボックス」+「ラベル」が各4個、「コマンドボタン」が2個、見出し用の「ラベル」1個で計11個のコントロールを貼り付けています。

各コントロールのキャプションを変更します

見た目をひととおり設定した画像がこちらです。

【設定した部分は】
・「ラベル」「ボタン」のキャプション文字列、文字サイズ、文字色、表示位置などの設定
・PW文字列を表示する「テキストボックス」の背景色(BackColor)を薄い黄色に設定
各オブジェクト名を次のように変更しています

コントロール名変更したオブジェクト名変更前のオブジェクト名備考
UserFormfmPW_MakeUserForm1フォーム名
TextBoxtxtSet1~3TextBox1~3設定値①~③
TextBoxtxtPWTextBox4生成したPW文字列
CommandButtoncmdPWCommandButton1PW生成ボタン
CommandButtoncmdExitCommandButton2終了ボタン

必要なVBAコードを設定していきます

ユーザーフォームを表示させるコード

ユーザーフォームはワークシートのセルをクリックして起動させるようにします。

'シートを変更(入力)すると動作
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'    Call start1
    fmPW_Make.Show
End Sub

・前の記事で設定していた部分はコメントアウトさせています。

コマンドボタンのコード

二つの「コマンドボタン」のクリックイベントにコードを設定します。

「PW生成」ボタンのコード

配置した3つの「テキストボックス」の文字列を使ってパスワードを生成するコードです。

'PW生成ボタンクリックで実行する
Private Sub cmdPW_Click()
    Dim strSet As String
    strSet = txtSet1.Value & txtSet2.Value & txtSet3.Value
    txtPW.Value = SHA256(strSet)
End Sub

・各テキストボックスの値を連結して変数(strSet)に代入しています。
SHA256(strSet)は、SHA256関数に変数を引き渡しています
・SHA256関数から戻ってきた値をテキストボックス(txtPW)の値に代入しています。

「終了」ボタンのコード

'終了ボタンでフォームを閉じます
Private Sub cmdExit_Click()
    Unload Me
End Sub

・Unload Me で「ユーザーフォーム」自身を閉じます。

動作を確認してみます

・実際に動作確認した時のGIF画像です。

・空の文字列でもPWを生成できるので、文字列の入力は省略して実行しています。
・「PW生成」ボタン押下で、生成できたPW文字列がテキストボックスに表示されました。
・「終了」ボタン押下でユーザーフォームが閉じることも確認できました。

・「テキストボックス」や「ラベル」の文字配置が上付き固定になっています。
・プロパティには横方向の設定だけ指定できるような仕様になっています。
これを何とか出来ないか、次回検討していきます

・ひとまずここまでの動作確認もできたので今回はここで終了します。

スポンサーリンク

まとめ(おわりに)

・いかがでしたでしょうか?
「いつも汎用でだれでも使えて活用できるように考えてVBAを使う」というポリシーを念頭に記事を書いています。
・今回も、記事内で使用したコードのサンプルファイルを登録していますのでご利用ください。
今までの記事のサンプルも登録していますのでよろしければお使いください(^^)

まとめと感想など

くるみこ
くるみこ

既出のコードをユーザーフォーム上で動作させてみる方法を解説しました。とりあえずは動作確認できましたが、まだまだ付け加えることがたくさんあります。次回は、気になったテキストボックスのタテ表示位置について検討します(^^)

「テキストボックス」や「ラベル」の文字列表示のタテは位置はホント気になりますね(^^; 次回、どのように対処するのかたのしみです!

くるみこ
くるみこ

機能的に作ることが大事ですが、カッコよく作るのもやっぱり考えたいですよね(^^; 次回改善できるかどうか一緒に考えましょう!

【今回わかったことは】
・ユーザーフォームに設置したテキストボックスの利用法
・テキストボックスの入力データの使い方
・ユーザーフォームからユーザー関数を利用する方法

今後の記事について

今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
「汎用でだれでも使えて活用できるように考えてVBAを使う」というポリシーで、記事を継続して書いていきたいと思っています。どうぞよろしくお願いしますm(_ _)m

【検討中の今後の記事内容は・・・・・】
・実務に役立つものを提供できるよう常に検討しています(^^ゞ
・その他雑記的に「プチネタなど」もいろいろ考えていきたいと思います・・・・・
・今後の記事にもご期待ください(^^)/

記事のサンプルファイルをダウンロードできます

今回の記事のサンプルをダウンロードできるようにしています
過去の記事で使用したサンプルファイルがダウンロードできるページを設置しています
こちら(このリンク先)からご利用ください