[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Input Boxのアスタリスク』(素人)
Sub 一番戻り()
If InputBox("一番へ戻ります。「パスワードを入力してください」 !") = "1234" Then
Else
MsgBox "パスワードが違います"
Exit Sub
End If
Sheets("一番").Select
End Sub
というInput Boxのパスワードを使用してますがInput Boxのパスワードをアスタリスクにする方法がないのでユーザーフォームで作ってましたがいまいちわからなかったので分かる方教えてください。
Excel2003 WindowsXP
新規ユーザーフォームにTextBoxを1つ配置してください。 で、Initializeイベントに
Private Sub UserForm_Initialize() Me.TextBox1.PasswordChar = "*" End Sub
として試してみましょう。
>いまいちわからなかったので 何がわからなかったのかがわかりませんけど・・・ (momo)
Private Sub UserForm_Initialize()
Me.TextBox1.PasswordChar = "*" End Sub では確かになりましたが エクセル上のコマンドボタンから
Sub 一番戻り()
If InputBox("一番へ戻ります。「パスワードを入力してください」 !") = "1234" Then
Else
MsgBox "パスワードが違います"
Exit Sub
End If
Sheets("一番").Select
End Sub
を実行したいのでユーザーフォーム
を立ち上げるタイミングは?
Sub 一番戻り() UserForm1.Show End Sub
だけにしておいて、ユーザーフォームにはTextBoxを1つ、CommandButtonを2つ配置して そちらの方で
Private Sub UserForm_Initialize() With Me .Caption = "一番へ戻ります。「パスワードを入力してください」!" .CommandButton1.Caption = "OK" .CommandButton2.Caption = "Cancel" .TextBox1.PasswordChar = "*" End With End Sub
Private Sub CommandButton1_Click() If Me.TextBox1.Text = "1234" Then Sheets("一番").Select Else MsgBox "パスワードが違います" End If Unload Me End Sub
Private Sub CommandButton2_Click() Unload Me End Sub
のようにしてみてはどうでしょうか? たぶん前回の質問でichinoseさんに言われていた汎用化にはなっていませんが まずはこのくらいからチャレンジしてみましょう。 (momo)
↑この質問者の方と同じ方ですか?本当は、 >ユーザーフォームで作ってましたがいまいちわからなかった ではなく、もっとピンポイントの質問をしてほしかったのですが・・・・。
このプログラムは、テキストボックスのPasswordCharプロパティを発見すれば、 何となく先が見えてきます。 悩むのは、このプログラムのインターフェースをどうするか? どうしたら、今後の部品として使いやすいオブジェクトとして残せるか? だったのですが・・・・。
ユーザーフォームを更にFunctionプロシジャーでラップする方法もあったのですが、 運用面の身軽さを考慮し、敢えてユーザーフォームだけの仕様にしました。
以下のような仕様にしました。
オブジェクト名 UserForm1
概略機能 パスワード入力用ダイアログを管理します。
プロパティ Title -----省略可能です。値の設定のみ可能です。 バリアント型 (Variant) の値を使用します。 ダイアログ ボックスのタイトルを指定します。 Promt -----文字列型 (String) の値を使用します。値の設定のみ可能です。 ダイアログ ボックスに表示するメッセージを指定します。 Xpos -----省略可能です。バリアント型 (Variant) の値を使用します。 画面の左上隅を基準として、ダイアログ ボックスの X 座標を ポイント単位で指定します。値の設定のみ可能です。 YPos -----省略可能です。バリアント型 (Variant) の値を使用します。 画面の左上隅を基準として、ダイアログ ボックスの Y 座標を ポイント単位で指定します。値の設定のみ可能です。 Value -----値の設定と取得が可能です。値の設置は、ダイアログ表示の初期値となり、 取得時は、ダイアログでの入力データが取得できます(Showメソッド実行後)。 但し、Falseが返るときは、キャンセルボタンクリック又は、ダイアログの閉じる ボタンを押されたことを示します。 すべてのプロパティの設定は、Showメソッド実行前に設定しておかなければ意味をなしません。 メソッド Show---- ダイアログを表示し、文字列の入力を促します。 パスワード入力用のように入力文字列を「*」でマスクします。
使用例 Sub test() Load UserForm1 With UserForm1 .title = "test" .promt = "何か入力してください" & vbCrLf & "それが大事" .Show If TypeName(.value) <> "Boolean" Then MsgBox “入力文字列は “ & .value Else MsgBox "キャンセル" End If End With Unload UserForm1 End Sub
Sub test1() Load UserForm1 With UserForm1 .xpos = 100 .ypos = 50 .promt = "何か入力してください" .Show If TypeName(.value) <> "Boolean" Then MsgBox .value Else MsgBox "キャンセル" End If End With Unload UserForm1 End Sub
備考 Userform1の使用では、情報の取得後は、必ず Unload Userform1 を実行してください。 これを実行しないとオブジェクトが開放されません。
実際の運用ではオブジェクト名は、Userform1ではなく、PasswardForm等、 機能にあったオブジェクト名を命名してください。
Userform1のコードは、次投稿にて・・・。
ichinose
では、Userform1のコードです。 新規ブックにて、試してみてください。
ユーザーフォームを一つ作成してください(UserForm1)。
本来は、事前に作成するコントロール(テキストボックス等)は、 すべてコードで作成しますので、何も配置しないでください。
何のコントロールも配置していないUserForm1のモジュールに
'============================================================== Option Explicit Public value As Variant Private lbl As MSForms.Label Private txt As MSForms.TextBox Private WithEvents cmdOK As MSForms.CommandButton Private WithEvents cmdCancel As MSForms.CommandButton '============================================================== Property Let promt(mes As String) lbl.Caption = mes End Property '============================================================== Property Let title(ttl As Variant) With Me .Caption = ttl End With End Property '============================================================== Property Let xpos(x As Variant) With Me .StartUpPosition = 0 .left = x End With End Property '============================================================== Property Let ypos(y As Variant) With Me .StartUpPosition = 0 .Top = y End With End Property '============================================================== Private Sub cmdCancel_Click() With Me .value = False .Hide End With End Sub '============================================================== Private Sub cmdOK_Click() With Me .value = txt.Text .Hide End With End Sub '============================================================== Private Sub UserForm_Activate() With Me If TypeName(.value) <> "Boolean" Then txt.Text = .value End With End Sub '============================================================== Private Sub UserForm_Initialize() With Me .StartUpPosition = 1 .value = False .Width = 220 .Height = 120 .Caption = "入力" Set lbl = .Controls.Add("Forms.Label.1", , True) With lbl .Caption = "" .left = 3 .Top = 3 .Width = 215 .Height = 42 End With Set txt = .Controls.Add("Forms.TextBox.1", , True) With txt .Text = "" .left = 0 .Top = 54 .Width = 210 .Height = 18 .PasswordChar = "*" End With Set cmdOK = .Controls.Add("Forms.CommandButton.1", , True) With cmdOK .Caption = "OK" .left = 96 .Top = 78 .Width = 54 .Height = 18 End With Set cmdCancel = .Controls.Add("Forms.CommandButton.1", , True) With cmdCancel .Caption = "キャンセル" .left = 156 .Top = 78 .Width = 54 .Height = 18 End With End With End Sub '============================================================== Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = 0 Then Me.value = False Me.Hide Cancel = 1 End If End Sub
以上です。
前投稿のtestやtest1を標準モジュールにコピーして実行してみてください。
もう一つ、上記Userform1を使った例題コードです。
標準モジュールに
Sub test2() Load UserForm1 With UserForm1 .title = "パスワード入力" .promt = "半角英数字でパスワードを入力してください" .Show If TypeName(.value) <> "Boolean" Then 'キャンセルではない If .value = "ichinose" Then MsgBox "正しいパスワードが入力されました" Else MsgBox "不正なパスワードです" End If Else MsgBox "キャンセルされました" End If End With Unload UserForm1 End Sub
コントロールを事前に配置したり、プロパティをここまで厳密にしなければ、 もう少し簡単なコードになると思います。
ichinose
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.