Bảo vệ Trang tính Cá nhân của Người dùng (Microsoft Excel)
Excel cho phép bạn bảo vệ các trang tính riêng lẻ, như bạn đã học trong các vấn đề khác của ExcelTips. (Bạn chọn Công cụ | Bảo vệ | Bảo vệ Trang tính.) Bạn có thể sử dụng phương pháp này để bảo vệ các trang tính riêng lẻ một cách độc lập, sử dụng http: // tên người dùng-mật khẩu khác nhau .com / 14 / what-make-a-good-password [mật khẩu].
Điều này có nghĩa là một người dùng có thể thực hiện các thay đổi đối với một trang tính bằng một mật khẩu và người khác có thể sử dụng một mật khẩu khác để thực hiện các thay đổi đối với trang tính kia.
Tuy nhiên, nếu bạn muốn giới hạn toàn bộ quyền truy cập vào các trang tính thì sao?
Điều gì xảy ra nếu bạn thậm chí không muốn người dùng trái phép xem trang tính khác? Nhu cầu này phức tạp hơn một chút để đáp ứng, nhưng nó có thể được thực hiện. Cách tiếp cận cơ bản sẽ như sau:
-
Thiết lập một sổ làm việc có ba trang tính: Một trang sẽ luôn mở, một cho người dùng 1 và trang thứ ba cho người dùng 2.
-
Ẩn trang tính cho người dùng 1 và người dùng 2.
-
Tạo một biểu mẫu xuất hiện bất cứ khi nào sổ làm việc được mở, yêu cầu tên người dùng và mật khẩu.
-
Tạo mã macro mở khóa và hiển thị trang tính phù hợp dựa trên tên người dùng và mật khẩu.
-
Bảo vệ toàn bộ sổ làm việc (Tools | Protection | Protect Workbook).
Các bước 1, 2 và 5 đủ dễ thực hiện và đã được đề cập trong các vấn đề khác của ExcelTips. Tuy nhiên, mấu chốt của phương pháp này là bước 3 và 4. Bạn có thể tạo biểu mẫu người dùng bằng cách làm theo các bước sau:
-
Nhấn Alt + F11 để hiển thị VBA Editor.
-
Trong VBA Editor, chọn Biểu mẫu người dùng từ menu Chèn. Một biểu mẫu người dùng trống, mới sẽ hiển thị, cùng với hộp công cụ của biểu mẫu.
-
Sử dụng điều khiển trong hộp công cụ biểu mẫu, thêm điều khiển TextBox nơi người dùng sẽ nhập tên người dùng của họ.
-
Thay đổi các thuộc tính cho điều khiển TextBox để Tên của nó là txtUser.
-
Sử dụng các điều khiển trong hộp công cụ biểu mẫu, thêm điều khiển TextBox nơi người dùng sẽ nhập mật khẩu của họ.
-
Thay đổi các thuộc tính cho điều khiển TextBox để Tên của nó là txtPass.
-
Ngay dưới điều khiển TextBox, hãy thêm điều khiển CommandButton.
-
Thay đổi các thuộc tính cho điều khiển CommandButton để Tên của nó là btnOK và Chú thích của nó là OK.
Với biểu mẫu người dùng của bạn được tạo, bạn đã sẵn sàng kết hợp mã macro với các điều khiển bạn vừa đặt. Đảm bảo rằng biểu mẫu người dùng được chọn và nhấn F7 để hiển thị cửa sổ Mã cho biểu mẫu. Cửa sổ có thể chứa một hoặc hai dòng mã được tạo tự động. Thay thế mã này bằng mã sau:
Dim bOK2Use As Boolean Private Sub btnOK_Click() Dim bError As Boolean Dim sSName As String Dim p As DocumentProperty Dim bSetIt As Boolean bOK2Use = False bError = True If Len(txtUser.Text) > 0 And Len(txtPass.Text) > 0 Then bError = False Select Case txtUser.Text Case "user1" sSName = "u1sheet" If txtPass.Text <> "u1pass" Then bError = True Case "user2" sSName = "u2sheet" If txtPass.Text <> "u2pass" Then bError = True Case Else bError = True End Select End If If bError Then MsgBox "Invalid User Name or Password" Sheets(sSName).Visible = True Sheets(sSName).Unprotect (txtPass.Text) Sheets(sSName).Activate bOK2Use = True Unload UserForm1 End If End Sub Private Sub UserForm_Terminate() If Not bOK2Use Then ActiveWorkbook.Close (False) End If End Sub
Đoạn mã trên thực hiện một số điều. Lưu ý rằng có hai thủ tục: một thủ tục dài hơn chạy khi người dùng nhấp vào nút OK trong biểu mẫu và một thủ tục khác chạy khi biểu mẫu kết thúc. Khi người dùng nhấp vào nút OK, quy trình sẽ kiểm tra để đảm bảo rằng sự kết hợp giữa tên người dùng và mật khẩu là chính xác. Nếu không, thì người dùng sẽ được thông báo. Nếu có, thì tên trang tính được ủy quyền sẽ được lưu trữ trong một biến tài liệu và trang tính thích hợp được hiển thị và không được bảo vệ.
Nếu bạn muốn thay đổi tên người dùng, tên trang tính và mật khẩu được chấp nhận, bạn có thể làm như vậy bằng cách thực hiện các thay đổi mong muốn trong cấu trúc Chọn trường hợp gần đầu mã macro này.
Macro thứ hai trong mã này (UserForm_Termina) có hiệu lực nếu người dùng cố gắng loại bỏ biểu mẫu của bạn mà không cần nhập tên người dùng và mật khẩu. Trong trường hợp này, nếu quá trình ủy quyền chưa được hoàn thành trước đó, thì sổ làm việc chỉ đơn giản là đóng.
Ngoài mã trên, bạn cũng sẽ cần thêm các macro sau vào chính sổ làm việc. Các biểu mẫu này mở biểu mẫu người dùng khi mở sổ làm việc và bảo vệ trang tính khi đóng sổ làm việc.
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim w As Worksheet Dim bSaveIt As Boolean bSaveIt = False For Each w In Worksheets If w.Visible Then Select Case w.Name Case "u1sheet" w.Protect ("u1pass") w.Visible = False bSaveIt = True Case "u2sheet" w.Protect ("u2pass") w.Visible = False bSaveIt = True End Select End If Next w If bSaveIt Then ActiveWorkbook.CustomDocumentProperties("auth").Delete ActiveWorkbook.Save End If End Sub Private Sub Workbook_Open() UserForm1.Show End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) If Sh.Name <> "Main" Then If Sh.Name <> ActiveWorkbook.CustomDocumentProperties("auth").Value Then Sh.Visible = False MsgBox "You don't have authorization to view that sheet!" End If End If End Sub
Khi người dùng chọn đóng sổ làm việc – họ đã hoàn thành công việc của mình – các trang tính áp dụng lại được bảo vệ và ẩn. (Nếu bạn thay đổi tên trang tính người dùng và mật khẩu, bạn cũng cần thay đổi chúng trong cấu trúc Chọn trường hợp ở đây.) Sau đó, macro sẽ xóa thuộc tính tài liệu thích hợp và lưu sổ làm việc.
Một macro thú vị khác ở đây là thủ tục Workbook_SheetActivate.
Điều này được bao gồm trong trường hợp một người dùng cố gắng sử dụng Định dạng | Trang tính | Bỏ ẩn để hiện trang tính của người dùng khác. Trong trường hợp này, tên trang tính được ủy quyền của người dùng (được lưu trữ trong biến tài liệu khi người dùng được ủy quyền ban đầu) được so sánh với trang tính đang được hiển thị. Nếu nó không khớp, thì người dùng không được phép xem trang tính. Cũng lưu ý rằng thủ tục này tham chiếu đến một trang tính có tên “Chính”. Trang tính này là trang tính thứ ba được đề cập ở phần đầu của mẹo này.
Trang tính này cũng là trang tính được hiển thị đầu tiên khi mở sổ làm việc.
_Lưu ý: _
Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.
ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.
Mẹo này (1952) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003.