Nhờ các bạn sửa lại 1 ít code (chuyển nhập mk hiển thị thành dạng ****) (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

alibaba2209

Thành viên thường trực
Tham gia
4/12/10
Bài viết
283
Được thích
13
Em có 1 đoạn code khóa all sheets và mở khóa all sheets (Nhờ các bạn sửa lại 1 code (chuyển nhập mk hiển thị thành dạng ****)

Sub Lockallsheet()
Dim ws
For Each ws In ThisWorkbook.Worksheets
ws.Protect "141822"
Next
End Sub
----------------------------------------------------------
Sub UnLockAllSheet()
Dim ws, P
On Error GoTo GPE
P = Application.InputBox("Nhap password", Type:=2)
If P <> "False" Then
For Each ws In ThisWorkbook.Worksheets
ws.Unprotect P
Next
End If
Exit Sub
GPE:
MsgBox "Sai mat khau"
End Sub
 
Em có 1 đoạn code khóa all sheets và mở khóa all sheets (Nhờ các bạn sửa lại 1 code (chuyển nhập mk hiển thị thành dạng ****)

Sub Lockallsheet()
Dim ws
For Each ws In ThisWorkbook.Worksheets
ws.Protect "141822"
Next
End Sub
----------------------------------------------------------
Sub UnLockAllSheet()
Dim ws, P
On Error GoTo GPE
P = Application.InputBox("Nhap password", Type:=2)
If P <> "False" Then
For Each ws In ThisWorkbook.Worksheets
ws.Unprotect P
Next
End If
Exit Sub
GPE:
MsgBox "Sai mat khau"
End Sub

Bạn tham khảo bài sau:

http://www.giaiphapexcel.com/forum/showthread.php?40985-Chuyển-ký-tự-sang-dạng-*&p=271197#post271197
 
Upvote 0

@alibaba2209: Bạn nên viết TV có dấu nhé


Chép code sau vào module:

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

Test code sau:

Mã:
Sub test()

    Dim ws, P
    P = InputBoxDK("Nhap password")
    If P = "141822" Then
        For Each ws In ThisWorkbook.Worksheets
            ws.Unprotect P
        Next
    Else
        MsgBox "Sai mat khau"
    End If


End Sub


Sub Lockallsheet()
    Dim ws
        For Each ws In ThisWorkbook.Worksheets
        ws.Protect "141822"
    Next
End Sub
 
Upvote 0
@alibaba2209: Bạn nên viết TV có dấu nhé


Chép code sau vào module:

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

Test code sau:

Mã:
Sub test()

    Dim ws, P
    P = InputBoxDK("Nhap password")
    If P = "141822" Then
        For Each ws In ThisWorkbook.Worksheets
            ws.Unprotect P
        Next
    Else
        MsgBox "Sai mat khau"
    End If


End Sub


Sub Lockallsheet()
    Dim ws
        For Each ws In ThisWorkbook.Worksheets
        ws.Protect "141822"
    Next
End Sub
Để.modum.khác.à.anh!
 
Upvote 0
Dùng form và textbox của VBA đi cho đơn giản thay vì phải API
với đặt thuộc tính PasswordChar của textbox là *
 
Upvote 0
@alibaba2209: Bạn nên viết TV có dấu nhé


Chép code sau vào module:

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

Test code sau:

Mã:
Sub test()

    Dim ws, P
    P = InputBoxDK("Nhap password")
    If P = "141822" Then
        For Each ws In ThisWorkbook.Worksheets
            ws.Unprotect P
        Next
    Else
        MsgBox "Sai mat khau"
    End If


End Sub


Sub Lockallsheet()
    Dim ws
        For Each ws In ThisWorkbook.Worksheets
        ws.Protect "141822"
    Next
End Sub
Để.modum.khác.à.anh!
 
Upvote 0
Web KT

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

Back
Top Bottom