Chuyển ký tự sang dạng "*"

Liên hệ QC

truonggiang73

Thành viên hoạt động
Tham gia
27/6/09
Bài viết
113
Được thích
35
Tôi nhờ mọi người giúp code chuyển các ký tự gõ vào trong INPUT BOX xác nhận mật khẩu để Unprotect Sheet sang dạng ký tự "*". Ví dụ mật khẩu là "giaiphapexcel" thì khi gõ trong Input Box hiện lên các ký tự "*************".
Tôi biết đã có bài viết trên diễn đàn rồi nhưng tìm mãi không được.
TG73 xin cảm ơn nhiều.
 

File đính kèm

Vấn đề này bạn lên hệ với anh Nguyen Duy Tuan chắc OK
 
Upvote 0
Tôi nhờ mọi người giúp code chuyển các ký tự gõ vào trong INPUT BOX xác nhận mật khẩu để Unprotect Sheet sang dạng ký tự "*". Ví dụ mật khẩu là "giaiphapexcel" thì khi gõ trong Input Box hiện lên các ký tự "*************".
Tôi biết đã có bài viết trên diễn đàn rồi nhưng tìm mãi không được.
TG73 xin cảm ơn nhiều.

Bỏ code sau vào module:

Mã:
'API functions to be used
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

'// Make it public = avail to ALL Modules
'// Lets simulate the VBA Input Function
Public Function InputBoxDK(Prompt As String, Optional Title As String, _
            Optional Default As String, _
            Optional Xpos As Long, _
            Optional Ypos As Long, _
            Optional HelpFile As String, _
            Optional Context As Long) As String
    
Dim lngModHwnd As Long, lngThreadID As Long
    
'// Lets handle any Errors JIC! due to HookProc> App hang!
On Error GoTo ExitProperly
lngThreadID = GetCurrentThreadId
lngModHwnd = GetModuleHandle(vbNullString)
    
hHook = SetWindowsHookEx(WH_CBT, AddressOf NewProc, lngModHwnd, lngThreadID)
If Xpos Then
    InputBoxDK = InputBox(Prompt, Title, Default, Xpos, Ypos, HelpFile, Context)
Else
    InputBoxDK = InputBox(Prompt, Title, Default, , , HelpFile, Context)
End If
ExitProperly:
UnhookWindowsHookEx hHook

End Function
Bây giờ chạy code sau:

Mã:
Private Sub CommandButton2_Click()
On Error Resume Next
If LCase(InputBoxDK("Moi ban nhap mat khau.")) = "giaiphapexcel" Then
ActiveSheet.Unprotect = True
Else
MsgBox ("BAN NHAP SAI MAT KHAU")
End If
Unload UserForm1
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Tôi nhờ mọi người giúp code chuyển các ký tự gõ vào trong INPUT BOX xác nhận mật khẩu để Unprotect Sheet sang dạng ký tự "*". Ví dụ mật khẩu là "giaiphapexcel" thì khi gõ trong Input Box hiện lên các ký tự "*************".
Tôi biết đã có bài viết trên diễn đàn rồi nhưng tìm mãi không được.
TG73 xin cảm ơn nhiều.
Dùng RefEdit Control bạn à! Nó hổ trợ Password char là ký tự tùy ý do bạn định nghĩa ---> Ai lại dùng InputBox cho mất công!
 
Upvote 0
Dùng textbox cũng được, nhưng phải tạo FormPicture1.jpg

attachment.php

pencil.png
 
Upvote 0
Cảm ơn các anh đã giúp đỡ. Các giải pháp đều áp dụng tốt và em đã áp dụng được.

Cho em đề xuất phương án của thầy ndu... của bài viết trước sử dụng hàm application.diaglos(28) = show trong trường hợp Sheet đã Protect có hợp lý không (Sử dụng trong excel luôn)?
Nói riêng :
Em định có bài chúc mừng thầy ndu chuẩn bị bài viết thứ 10.000 (Những bài viết của thầy mang tính xây dựng, giúp đỡ, động viên... các thành viên trong diễn đàn rất cao) Không hiểu ý thầy và BQT có ủng hộ không
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn các anh đã giúp đỡ. Các giải pháp đều áp dụng tốt và em đã áp dụng được.
Cho em đề xuất phương án của thầy ndu... của bài viết trước sử dụng hàm application.diaglos(28) = show trong trường hợp Sheet đã Protect có hợp lý không (Sử dụng trong excel luôn)?

Sub abc()
ActiveSheet.Unprotect("pass")
........
ActiveSheet.Protect("pass")
End Sub

Thế là xong!
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom