Excel에서는 _ExcelTips의 다른 문제에서 배운 것처럼 개별 워크 시트를 보호 할 수 있습니다. (도구 | 보호 | 시트 보호를 선택합니다.)이 접근 방식을 사용하여 다른 http : // username-password를 사용하여 개별 워크 시트를 독립적으로 보호 할 수 있습니다. .com / 14 / what-makes-a-good-password [비밀번호].

즉, 한 사용자는 하나의 암호를 사용하여 한 워크 시트를 변경할 수 있고 다른 사용자는 다른 암호를 사용하여 다른 워크 시트를 변경할 수 있습니다.

그러나 워크 시트에 대한 액세스를 완전히 제한하려면 어떻게해야합니까?

권한이없는 사용자가 다른 워크 시트를 보지 못하게하려면 어떻게해야합니까? 이 요구는 수용하기가 조금 더 까다 롭지 만 가능합니다. 기본 접근 방식은 다음과 같습니다.

  1. 세 개의 워크 시트가있는 통합 문서를 설정합니다. 하나는 항상 열려 있고 하나는 사용자 1 용이고 다른 하나는 사용자 2 용입니다.

  2. 사용자 1과 사용자 2의 워크 시트를 숨 깁니다.

  3. 통합 문서를 열 때마다 나타나는 양식을 만들고 사용자 이름과 암호를 요청합니다.

  4. 사용자 이름과 암호를 기반으로 적절한 워크 시트를 잠금 해제하고 표시하는 매크로 코드를 만듭니다.

  5. 전체 통합 문서를 보호합니다 (도구 | 보호 | 통합 문서 보호).

1, 2, 5 단계는 쉽게 할 수 있으며 _ExcelTips_의 다른 문제에서 다루었습니다. 그러나이 접근 방식의 핵심은 3 단계와 4 단계입니다. 다음 단계에 따라 사용자 양식을 만들 수 있습니다.

  1. Alt + F11을 눌러 VBA 편집기를 표시합니다.

  2. VBA 편집기의 삽입 메뉴에서 사용자 양식을 선택합니다. 양식 도구 상자와 함께 비어있는 새 사용자 양식이 표시됩니다.

  3. 양식 도구 상자의 컨트롤을 사용하여 사용자가 사용자 이름을 입력 할 TextBox 컨트롤을 추가합니다.

  4. 이름이 txtUser가되도록 TextBox 컨트롤의 속성을 변경합니다.

  5. 양식 도구 상자의 컨트롤을 사용하여 사용자가 암호를 입력 할 TextBox 컨트롤을 추가합니다.

  6. 이름이 txtPass가되도록 TextBox 컨트롤의 속성을 변경합니다.

  7. TextBox 컨트롤 바로 아래에 CommandButton 컨트롤을 추가합니다.

  8. 이름이 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에 적용됩니다.