lethanhnhan
Thành viên chính thức


- Tham gia
- 27/5/07
- Bài viết
- 76
- Được thích
- 249
Chào các bạn,
Chắc có lẻ đây là câu hỏi mà các bạn thường gặp khi "trình độ lập trình VBA" của mình "có vẻ khả quan" !
_Làm thế nào để tôi phân quyền người dùng trên các worksheet?
_Làm thế nào để tôi phần quyền người dùng trên các form?
...và các câu hỏi gần như có cùng mục đích.
Tôi xin giới thiệu với các bạn "một giải pháp củ chuối" hy vọng các bạn hài lòng.
Để phân quyền tôi phải biết được tên người dùng.
Tôi muốn người dùng phải Log-In khi workbook mở ra, tôi dùng đọan code sau:
Khi workbook được mở tôi hiện form bắt buộc người dùng log-in
Tòan bộ code của form này như sau:
Lê Thanh Nhân
Chắc có lẻ đây là câu hỏi mà các bạn thường gặp khi "trình độ lập trình VBA" của mình "có vẻ khả quan" !
_Làm thế nào để tôi phân quyền người dùng trên các worksheet?
_Làm thế nào để tôi phần quyền người dùng trên các form?
...và các câu hỏi gần như có cùng mục đích.
Tôi xin giới thiệu với các bạn "một giải pháp củ chuối" hy vọng các bạn hài lòng.
Để phân quyền tôi phải biết được tên người dùng.
Tôi muốn người dùng phải Log-In khi workbook mở ra, tôi dùng đọan code sau:
Mã:
Private Sub Workbook_Open()
On Error GoTo Workbook_Open_Error
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
frmLogIn.Show
Call ActionB4CloseOpen("OPEN")
ErrorExit:
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = True
End With
Exit Sub
Workbook_Open_Error:
If bCentralErrorHandler("ThisWorkbook", "Workbook_Open", , False) Then
Stop
Resume
Else
Resume ErrorExit
End If
End Sub
Khi workbook được mở tôi hiện form bắt buộc người dùng log-in

Tòan bộ code của form này như sau:
Mã:
Option Explicit
Dim iCount As Long
Private Sub cmdLogIn_Click()
Dim sUserName As String, sUserSoSanh As String
Dim sPass As String, sPassSoSanh As String
Dim sRight As String
Dim rngRange As Range
On Error GoTo cmdLogIn_Click_Error
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
If iCount > 3 Then
MsgBox "You have enter more than " & iCount & " times!" & vbCrLf & _
"Pls, contact your Administrator.", vbOKOnly, "Inf"
End
End If
sUserName = txtTenTruyCap.Text
sUserSoSanh = UserExist(sUserName)
'Check the user name
If Len(Trim(sUserSoSanh)) = 0 Then
MsgBox "This user does not exist!", vbOKOnly, "Inf"
txtTenTruyCap.Text = ""
txtPass.Text = ""
txtTenTruyCap.SetFocus
iCount = iCount + 1
End If
sPass = txtPass.Text
'Get Password
sPassSoSanh = GetUserPassword(sUserName)
'Get right of User
sRight = GetUserRight(sUserName)
If sPass = sPassSoSanh And Len(Trim(sUserSoSanh)) > 0 Then
If Len(Trim(sRight)) > 0 Then
MsgBox "Welcome to " & vbCrLf & _
"STOCK COUNT HELPER TOOL " & vbCrLf & _
"Author: Le Van Duyet" & vbCrLf & _
"You have accessed with " & sRight & " right.", vbOKOnly, "Inf"
Application.Range("UserName").Value = sUserSoSanh
Else
MsgBox "Welcome to " & vbCrLf & _
"STOCK COUNT HELPER TOOL " & vbCrLf & _
"Author: Le Van Duyet" & vbCrLf & _
"You have accessed with " & "?" & " right.", vbOKOnly, "Inf"
iCount = iCount + 1
Application.Range("UserName").Value = sUserSoSanh
End If
ElseIf Len(Trim(sUserSoSanh)) > 0 Then
MsgBox "Wrong Password !" & vbCrLf & _
"Pls enter again.", vbOKOnly, "Inf"
txtPass.Text = ""
txtPass.SetFocus
iCount = iCount + 1
Exit Sub
End If
If sRight = "Admin" And Len(Trim(sUserSoSanh)) > 0 Then
'Neu quyen la admin thi se mo cac sheet
'de cap nhat du lieu
Call ActionB4CloseOpen("ACCESSDATA")
Me.Hide
ElseIf Len(Trim(sUserSoSanh)) > 0 Then
MsgBox "You can only enter data!", vbOKOnly, "Inf"
Call ActionB4CloseOpen("OPEN")
Me.Hide
End If
ErrorExit:
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = True
End With
Exit Sub
cmdLogIn_Click_Error:
If bCentralErrorHandler("frmLogIn", "cmdLogIn_Click", , False) Then
Stop
Resume
Else
Resume ErrorExit
End If
End Sub
Private Sub cmdThoat_Click()
End
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'Do not allow the user close the form by clicking the X button
If CloseMode = vbFormControlMenu Then
Cancel = True
End If
End Sub
Lê Thanh Nhân