[[20110112143703]] 『Input Boxのアスタリスク』(素人) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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)

パスワードを入力するときにアスタリスクにしたいのですがテキストボックスの
PasswordChar に*を入力すればというのは分かりましたがその先がいまいちわからないんですが・・・

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)

[[20110108092639]]
 ↑この質問者の方と同じ方ですか?本当は、
 >ユーザーフォームで作ってましたがいまいちわからなかった
 ではなく、もっとピンポイントの質問をしてほしかったのですが・・・・。

 このプログラムは、テキストボックスの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.