사용자 별 개별 워크 시트 보호 (Microsoft Excel)
Excel에서는 _ExcelTips의 다른 문제에서 배운 것처럼 개별 워크 시트를 보호 할 수 있습니다. (도구 | 보호 | 시트 보호를 선택합니다.)이 접근 방식을 사용하여 다른 http : // username-password를 사용하여 개별 워크 시트를 독립적으로 보호 할 수 있습니다. .com / 14 / what-makes-a-good-password [비밀번호].
즉, 한 사용자는 하나의 암호를 사용하여 한 워크 시트를 변경할 수 있고 다른 사용자는 다른 암호를 사용하여 다른 워크 시트를 변경할 수 있습니다.
그러나 워크 시트에 대한 액세스를 완전히 제한하려면 어떻게해야합니까?
권한이없는 사용자가 다른 워크 시트를 보지 못하게하려면 어떻게해야합니까? 이 요구는 수용하기가 조금 더 까다 롭지 만 가능합니다. 기본 접근 방식은 다음과 같습니다.
-
세 개의 워크 시트가있는 통합 문서를 설정합니다. 하나는 항상 열려 있고 하나는 사용자 1 용이고 다른 하나는 사용자 2 용입니다.
-
사용자 1과 사용자 2의 워크 시트를 숨 깁니다.
-
통합 문서를 열 때마다 나타나는 양식을 만들고 사용자 이름과 암호를 요청합니다.
-
사용자 이름과 암호를 기반으로 적절한 워크 시트를 잠금 해제하고 표시하는 매크로 코드를 만듭니다.
-
전체 통합 문서를 보호합니다 (도구 | 보호 | 통합 문서 보호).
1, 2, 5 단계는 쉽게 할 수 있으며 _ExcelTips_의 다른 문제에서 다루었습니다. 그러나이 접근 방식의 핵심은 3 단계와 4 단계입니다. 다음 단계에 따라 사용자 양식을 만들 수 있습니다.
-
Alt + F11을 눌러 VBA 편집기를 표시합니다.
-
VBA 편집기의 삽입 메뉴에서 사용자 양식을 선택합니다. 양식 도구 상자와 함께 비어있는 새 사용자 양식이 표시됩니다.
-
양식 도구 상자의 컨트롤을 사용하여 사용자가 사용자 이름을 입력 할 TextBox 컨트롤을 추가합니다.
-
이름이 txtUser가되도록 TextBox 컨트롤의 속성을 변경합니다.
-
양식 도구 상자의 컨트롤을 사용하여 사용자가 암호를 입력 할 TextBox 컨트롤을 추가합니다.
-
이름이 txtPass가되도록 TextBox 컨트롤의 속성을 변경합니다.
-
TextBox 컨트롤 바로 아래에 CommandButton 컨트롤을 추가합니다.
-
이름이 btnOK이고 캡션이 OK가되도록 CommandButton 컨트롤의 속성을 변경합니다.
사용자 양식이 생성되면 방금 배치 한 컨트롤과 매크로 코드를 연결할 수 있습니다. 사용자 양식이 선택되었는지 확인하고 F7을 눌러 양식의 코드 창을 표시하십시오. 창에는 자동으로 생성 된 코드 한두 줄이 포함될 수 있습니다. 이를 다음 코드로 바꿉니다.
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" Else 'Set document property bSetIt = False For Each p In ActiveWorkbook.CustomDocumentProperties If p.Name = "auth" Then p.Value = sSName bSetIt = True Exit For End If Next p If Not bSetIt Then ActiveWorkbook.CustomDocumentProperties.Add _ Name:="auth", LinkToContent:=False, _ Type:=msoPropertyTypeString, Value:=sSName End If 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
위의 코드는 여러 가지 작업을 수행합니다. 두 가지 절차가 있습니다. 하나는 사용자가 양식에서 확인 버튼을 클릭 할 때 실행되는 더 긴 절차와 양식이 종료 될 때 실행되는 절차입니다. 사용자가 확인 버튼을 클릭하면 절차는 사용자 이름과 암호의 조합이 올바른지 확인합니다. 그렇지 않은 경우 사용자에게 알림이 전송됩니다. 그렇다면 승인 된 시트 이름이 문서 변수에 저장되고 적절한 시트가 표시되고 보호되지 않습니다.
허용되는 사용자 이름, 시트 이름 및 암호를 변경하려는 경우이 매크로 코드 상단 근처의 Select Case 구조에서 원하는대로 변경하면됩니다.
이 코드의 두 번째 매크로 (UserForm_Terminate)는 사용자가 사용자 이름과 암호를 입력하지 않고 단순히 양식을 닫으려고 할 때 작동합니다. 이 경우 권한 부여 프로세스가 이전에 완료되지 않은 경우 통합 문서가 닫힙니다.
위의 코드 외에도 통합 문서 자체에 다음 매크로를 추가해야합니다. 통합 문서를 열 때 사용자 양식을 열고 통합 문서를 닫을 때 워크 시트를 보호합니다.
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
사용자가 통합 문서를 닫도록 선택하면 (작업이 완료되면) 해당 워크 시트가 다시 보호되고 숨겨집니다. (사용자 시트 이름과 암호를 변경하는 경우 여기에있는 Select Case 구조에서도 변경해야합니다.) 그런 다음 매크로는 적절한 문서 속성을 삭제하고 통합 문서를 저장합니다.
여기서 또 다른 흥미로운 매크로는 Workbook_SheetActivate 프로 시저입니다.
한 사용자가 Format | 시트 | 다른 사용자의 워크 시트를 숨김 해제하려면 숨김 해제합니다. 이 경우 사용자의 승인 된 시트 이름 (사용자가 원래 승인되었을 때 문서 변수에 저장 됨)이 표시되는 시트와 비교됩니다. 일치하지 않으면 사용자가 워크 시트를 볼 수 없습니다. 또한이 절차는 “Main”이라는 워크 시트를 참조합니다. 이 워크 시트는이 팁의 시작 부분에서 언급 한 세 번째 워크 시트입니다.
이 워크 시트는 통합 문서를 열 때 처음 표시되는 워크 시트이기도합니다.
_ 참고 : _
이 페이지 (또는 ExcelTips 사이트의 다른 페이지)에 설명 된 매크로를 사용하는 방법을 알고 싶다면 유용한 정보가 포함 된 특별 페이지를 준비했습니다.
link : / excelribbon-ExcelTipsMacros [새 브라우저 탭에서 특별 페이지를 열려면 여기를 클릭하세요]
.
_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.
이 팁 (1952)은 Microsoft Excel 97, 2000, 2002 및 2003에 적용됩니다.