プロが教えるわが家の防犯対策術!

レポートを開く際に下記のコードを使ってパスワードを入力を促しています。

Private Sub Report_Open(Cancel As Integer)
If InputBox("パスワードを入力して下さい") <> "password" Then
MsgBox "社員コードが間違っています。"
Cancel = True
End If
End Sub

このままだとパスワードを入力している最中に、passwordといれているのがバレバレです。
そこで入力時に表示しないようにしたいのですが可能でしょうか?

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/11/18 16:39

一般の 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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/09/25 08:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!