Excel VBA UserForm スピンボタンの利用方法

スポンサーリンク

さて、今回はUserFormに設置するコントロールのうち「スピンボタン」の使い方について勉強していきます。生成したパスワード文字列の長さ設定に利用する方法を検証していきます。

くるみこ
くるみこ

コンボボックスの次は「スピンボタン」について勉強しましょう。どのような使い方に活用できるのかを勉強していきます(^^)/

「スピンボタン」はどういうものなのか全くわかりません(^^ゞ
よろしくお願いします!

【この記事でわかること
・UserFormに設置した「スピンボタン」の利用方法がわかります
コマンドボタンでテキストボックスの選択文字列をコピーする方法がわかります

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

くるみこ
くるみこ

前回記事は、ユーザーフォームのコンボボックス文字列とセル範囲のデータとの重複チェックや連携方法を再構築した記事でした。よければ覗いてみてね(^^)/

スポンサーリンク

UserFormにスピンボタンを設置します

スピンボタンとは

スピンボタンとは、◀︎▶︎(左右)や(上下)のボタンをクリックして、特定の範囲内で値を増減させるコントロールです。スピンボタンを配置すればクリック操作で値を細かく増減できます。配置方法は、「縦配置」か「横配置」の選択が可能です。

スピンボタンの利用方法を検討

・「PW生成ツール」のどこで利用するか検討します。
・まずは「パスワード管理」については過去記事を参照しました。

・左側の文字列の長さを変更する設定に「スピンボタン」が使えそうです。

スピンボタンを設置してみます

・「スピンボタン」と連動して値を表示する「テキストボックス」を設置しました。

・オブジェクト名をスピンボタンは「SpinB1」テキストボックスは「TxtBox1」に変更しました。
・ついでに、生成したPWをコピーする「PWコピー」ボタンも設置しました。

スピンボタンのプロパティ(今回使用するもの)

Max プロパティ
 スピンボタンの最大値を設定できます。生成PWは最長24文字なので「24」に設定します

Min プロパティ
 スピンボタンの最小値の設定できます。ここはデフォルト「0」のままとします

Orientation プロパティ
 スピンボタンの配置方向を設定できます。今回は水平(横)方向の配置としました

定数内容
fmOrientationAuto(既定値)-1大きさによって自動的に判定します。
fmOrientationVertical0垂直(縦)方向に配置します。
fmOrientationHorizontal1水平(横)方向に配置します。

スピンボタンに連動するコード

・スピンボタンクリック時に発生するChangeイベントのコードです。

'スピンボタンクリック時に発生するイベント
Private Sub SpinB1_Change()
    TxtBox1.Value = SpinB1.Value
    With txtPW
        .SetFocus   'フォーカスを受ける
        .SelStart = 0
        .SelLength = TxtBox1.Value
    End With
End Sub

・3行目で、スピンボタンの値をテキストボックスに渡して表示させています。
・4行目からは、生成PWのテキストに「SetFocus」メソッドでフォーカスを移し、「SelStart」から「SelLength」(=TxtBox1の値)までの文字列長を選択状態にしています。
・ただし「SetFocus」メソッドはその都度更新してあげないとスムーズな表示にならないので、次のコードを追加して、フォーカスを一旦外す動作を入れるようにしました。

'データが変わった時に発生するイベント
Private Sub TxtBox1_Change()
    TxtBox1.SetFocus  'フォーカスを一旦受け取る
End Sub

・「TxtBox1」のChangeイベントに「SetFocus」を入れることで、数値変更時にフォーカスを一旦受け取るように設定しました。
・これで選択状態の表示がスムーズに動くようになりました。

コマンドボタンで生成PW文字列をコピーする

・選択状態のPW文字列をクリップボードにコピーするコードを検証しました。
・最初に考えたのは、「SelText」を DataObject を通してクリップボードに送る方法でした。
・そのコードがこちらです。

'選択PW文字列をコピーする(×この方法は文字化けするので使えない×)
Private Sub cmdCopy_Click()
    Dim selData As New DataObject
    With selData
        .SetText txtPW.SelText
        .PutInClipboard
    End With
End Sub

・何の問題もなくエラーなく実行されます。
ところが問題発覚!「クリップボード」からペーストすると「・・・」文字化け‼
・これでは使えません(-_-;)
・次に検討したのは、テキストボックスのCopyメソッドを使うだけの方法です。

'選択PW文字列をコピーする
Private Sub cmdCopy_Click()
    With txtPW
        .SelStart = 0
        .SelLength = TxtBox1.Value
        .Copy
    End With
End Sub

・これは「文字化け」せずにうまくクリップボードにコピーできました\(^o^)/

・今回はここで終了します。

スポンサーリンク

まとめ(おわりに)

・いかがでしたでしょうか?
・今回も、記事内で使用したコードのサンプルファイルを登録していますのでご利用ください。
今までの記事のサンプルも登録していますのでよろしければお使いください(^^)

まとめと感想など

くるみこ
くるみこ

「スピンボタン」を利用してテキスト文字列の選択量を調整する方法を勉強しました。これでまたパスワード管理の設定が一歩前進できましたね(^^)

「スピンボタン」面白いですね!
クリップボードの文字化けにはビックリでした!しっかりと動作確認しないといけないことが改めて確認出来てよかったです(^^)

くるみこ
くるみこ

次回はどのコントロールにしようか検討中!
「チェックボックス」か「オプションボタン」になるのかなぁ(^^)

【今回わかったことは】
・スピンボタンの利用方法がわかりました
・テキストボックスの選択文字列のコピー方法がわかりました

今後の記事について

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

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

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

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