• 締切済み

入力時のパスワードを「*」などにして見えないようにするには?

レポートを開く際に下記のコードを使ってパスワードを入力を促しています。 Private Sub Report_Open(Cancel As Integer) If InputBox("パスワードを入力して下さい") <> "password" Then MsgBox "社員コードが間違っています。" Cancel = True End If End Sub このままだとパスワードを入力している最中に、passwordといれているのがバレバレです。 そこで入力時に表示しないようにしたいのですが可能でしょうか?

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 私は、Accessは門外漢ですから、違うのかもしれませんが、ちょっと考えてみました。 レポートそのものを隠しオブジェクトにしておいて、フォームを作っておいて、そのフォームの定型を「PASSWORD」にしておきます。 次に、テキストボックスのデータ[タブ]「定型入力」を、[パスワード] に選んでおいて、イベントの[キークリック時]の[イベントプロシージャ]を以下のようにすれば、レポートは、パスワードがなければ立ち上がりませんね。 Private Sub TextBox1_KeyDown(KeyCode As Integer, Shift As Integer) Const MYPW As String = "abc" If KeyCode = 13 Then  If TextBox1.Text = MYPW Then    DoCmd.OpenReport "テーブル1", acPreview, "", ""   Else    KeyCode = 0    MsgBox "パスワードが違います。"    Exit Sub   End If End If End Sub 参考: http://www.accessclub.jp/urawaza/61.html IDとパスワードを用いてフォームを開く : Access裏技Tips

hikari_tai
質問者

お礼

教えて!gooのマイページの表現が変わってしまい、 自分のQ&Aはどこにいってしまったのか謎のままでした。 凄く遅くなってしまい申し訳ございませんでした。 この問題は結局わからず、普通にプロパティのなかでパスワードを設定して対応してしまいました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

一般の InputBoxでは無理です。 多少(かなり?)長くなりますが、以下のコードをおためしください。 Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _ ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _ (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, _ ByVal dwThreadId As Long) As Long Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long Private Declare Function SendDlgItemMessage Lib "user32" Alias "SendDlgItemMessageA" _ (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal wMsg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, _ ByVal lpClassName As String, _ ByVal nMaxCount As Long) As Long Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long 'Constants to be used in our API functions Private Const EM_SETPASSWORDCHAR = &HCC Private Const WH_CBT = 5 Private Const HCBT_ACTIVATE = 5 Private Const HC_ACTION = 0 Private hHook As Long Public Function NewProc(ByVal lngCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim RetVal Dim strClassName As String, lngBuffer As Long If lngCode < HC_ACTION Then NewProc = CallNextHookEx(hHook, lngCode, wParam, lParam) Exit Function End If strClassName = String$(256, " ") lngBuffer = 255 If lngCode = HCBT_ACTIVATE Then 'A window has been activated RetVal = GetClassName(wParam, strClassName, lngBuffer) If Left$(strClassName, RetVal) = "#32770" Then 'Class name of the Inputbox 'This changes the edit control so that it display the password character *. 'You can change the Asc("*") as you please. SendDlgItemMessage wParam, &H1324, EM_SETPASSWORDCHAR, Asc("*"), &H0 End If End If 'This line will ensure that any other hooks that may be in place are 'called correctly. CallNextHookEx hHook, lngCode, wParam, lParam End Function Public Function InputBoxDK(Prompt, Optional Title, Optional Default, Optional XPos, _ Optional YPos, Optional HelpFile, Optional Context) As String Dim lngModHwnd As Long, lngThreadID As Long lngThreadID = GetCurrentThreadId lngModHwnd = GetModuleHandle(vbNullString) hHook = SetWindowsHookEx(WH_CBT, AddressOf NewProc, lngModHwnd, lngThreadID) InputBoxDK = InputBox(Prompt, Title, Default, XPos, YPos, HelpFile, Context) UnhookWindowsHookEx hHook End Function Sub Report_Open() If InputBoxDK("パスワードを入力して下さい") <> "password" Then MsgBox "社員コードが間違っています。" End If End Sub

hikari_tai
質問者

お礼

アドバイスありがとうございます。 VBAの知識は乏しいので自分なりに時間を掛けて勉強しなおしたいと思います。

関連するQ&A

  • エクセルVBA設定 パスワード入力しても印刷不可

    エクセルVBAでパスワードを入力しないと印刷できない設定にしました。 Private Sub Workbook_BeforePrint(Cancel As Boolean) Password = "1111" x = InputBox("印刷注意 パスワード") If x = Password Then Else Cancel = True End If End Sub パスワード【1111】を入力しても印刷できないのですが、なぜでしょう?

  • パスワード入力の日本語入力をオフにしたい

    いつもお世話になっています。 ボタンにパスワードを入力するイベントを設定しています。 インプットボタンにカーソルが入ると自動的に日本語入力がオンになります。 これを反対にオフにするようにするにはどうしたらよいか教えてください。 よろしくお願いいたします。 Private Sub ログイン_Click() If InputBox("パスワードを入力して下さい。, "認証") = "mainte" Then DoCmd.OpenForm "F_メンテナンスフォーム" Else MsgBox "パスワードが間違っています。", vbOKOnly + vbInformation DoCmd.OpenForm "F_メインフォーム" End If End Sub

  • マクロ inputbox ブランクで入力した時

    いつも回答して頂きありがとうございます。 InputBoxに何も入力せず、OKを押してしまった場合、マクロの処理を終了させたいのですが、どうしたらよろしいでしょうか?宜しくお願い致します。 Sub 名前を入力する() Dim a As Long a = Application.InputBox("班を数字で入力して下さい。", Type:=1) If a = 0 Then MsgBox "キャンセルされました。", vbOKOnly Exit Sub End If With ActiveSheet .Range("E4:F5").Value = Worksheets("名前一覧").Cells(2, a).Value End With End Sub

  • InputBox関数について

    VBAの勉強中です。 教えてください。 INPUTBOX関数で、何も入力しないでの入力も可、とするコードはどうなるでしょうか。 言葉を変えて言えば、入力ボックスが未入力の状態でOKボタンを押すということです。 例えば以下のようにすると、当然ながら「キャンセル」と判断されます。 Sub Test()  Dim myData As String  myData = InputBox("入力してください")   If myData = "" Then     MsgBox "キャンセル"   Else     MsgBox "入力OK"   End If End Sub ■■尚、今回は、メソッドではなくて関数での質問になりますのでその点よろしくお願いします。  

  • アクセス レポート バックカラーの変更方法

    現在レポートで1行ごとにバックカラーを変えて印刷しておりますが、それをチェックボックスにチェックがはいった行だけをカラーにするよう変更したいと考えておりますが、よくわかりません。現在のコードをコピーしました。お手数ですがご指導願います。 Option Compare Database Dim bline As Integer Private Sub Report_Open(Cancel As Integer) End Sub Private Sub ページヘッダー_Format(Cancel As Integer, FormatCount As Integer) bline = 0 End Sub Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) bline = bline + 1 If bline Mod 2 Then Me.Section(0).BackColor = 16777215 Else Me.Section(0).BackColor = 12663225 End If End Sub

  • キャンセルボタンをクリックしたかどうかを取得したい

    InputBoxでもしキャンセルボタンが押されたら・・・ってどうやればいいですか? Sub あああ() Dim a As String a = InputBox("文字を入れてください。") MsgBox a End Sub をした時に、キャンセルボタンをクリックしたかどうかを取得したいのですが、どうすればいいんですか? a = InputBox("文字を入れてください。") の次に Cancel = True をいれても vbCancel = True をいれてもエラーになります。 Sub あああ() Dim a As String a = InputBox("文字を入れてください。") If a = "" Then MsgBox "キャンセルが押されました" End If End Sub これだとOKでもキャンセルでもメッセージが表示されます。

  • レポート ちらつきを回避したい

    レポートにデータがない時は Private Sub Report_NoData(Cancel As Integer) Cancel = True End Sub これで、レポートを開くことを回避できるのですが、 一瞬だけレポートが立ち上がり、一瞬で消えます。 この一瞬の動きを非表示にしたいのですが、可能でしょうか? 画面がちらついて見えてしまいます。 Private Sub Report_NoData(Cancel As Integer) DoCmd.Echo False Cancel = True DoCmd.Echo True End Sub エコーを入れてもちらつきを回避できませんでした。

  • エクセルVBAで Cancel=Trueの使い方

    Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub Cancel = True MsgBox "キャンセルしました" End Sub Private Sub Worksheet_Deactivate() Cancel = True MsgBox "キャンセルしました" End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Cancel = True MsgBox "キャンセルしました" End Sub 以上のように使ってみましたが、どれも「キャンセルしました」とメッセージは出るものの、直前の操作(入力、シート切替、セル移動)はキャンセルされませんでした。 どこが間違っているのでしょうか?

  • エラー内容が分かりません

    ACCESS VBAの独学を始めました。テキストどうりにコードを入力しているのですが、以下のエラーがでていまいます。 プロシージャの宣言がイベントまたはプロシージャの定義と一致していません 入力内容は以下のとおりです Private Sub 閉じる_Click(cancel As Integer) Dim sts As Integer sts = MsgBox("終了しますか?", vbYesNo) If (sts = vbNo) Then cancel = True Else DoCmd.Close End If End Sub (cancel as ・・・)を消去すると、エラーはでません。 なぜなのか分からず質問しました。 すみませんが、よろしくお願いいたします。

  • 間違った入力をした時、もう一度入力させる場合

    以前、 "textBox1に品番を入れたら、Label1に品名を表示させています。 このとき、TextBox1に存在しない品番を入力した場合は、 再度入れなおしをさせたいのです。" における質問と回答(-yellowtail-&e10go) を参照して textbox1の文字数が8文字以外のときは、もう一度textbox1に戻って来るように、次のように入力しました。 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If Len(TextBox1) <> 8 Then MsgBox ("正しい日付を入力してください。") Cancel = True TextBox1.SetFocus(この行は、うまく行かないので、勝手につけてみましたが、うまく行きませんでした) Exit Sub End If End Sub しかしながら、うまくtextbox1に戻ってくれません。 また、この入力のためのuserformを消す際にも、 MsgBox ("正しい日付を入力してください。") が表示されてしまいます。 2つの点で困っています。 どのように改良したら良いでしょうか? すいませんが、よろしくお願いいたします。

専門家に質問してみよう