Цель и проблема
Моя цель - ограничить доступ к различным рабочим листам в соответствии с именем пользователя, которое в настоящее время использует файл Excel.
У меня будет минимум 14 пользователей (1 администратор и 13 начальников отделов), и у каждого будет разный доступ к нескольким рабочим листам. Администратор будет иметь доступ ко всем рабочим листам, в то время как главы департаментов будут иметь доступ к рабочему листу, связанному только с их отделом, и как минимум к 2 или 3 другим рабочим листам.
В настоящее время я могу предоставить доступ к один лист, но, как я уже говорил ранее, я хочу, чтобы они имели доступ к нескольким листам.
Что я пробовал
Я пытался использовать массивы несколькими способами, но ни один из них не работал так далеко.
Select Case Application.UserName
Case "User 2"
Set GetAllowedSheet = Sheets(Array("Sheet2", "Sheet3", "Sheet4"))
Dim ArrayOne as Variant
ArrayOne = Array("Sheet2", "Sheet3", "Sheet4")
Select Case Application.UserName
Case "User 2"
Set GetAllowedSheet = Sheets(ArrayOne)
Я провел небольшое исследование в Google, но, похоже, ничего не соответствует тому, что я ищу.
Код
Private Sub Workbook_Open()
Showorksheets
End Sub
Sub Showorksheets()
Dim ws As Worksheet
Dim wsAllowed As Worksheet
If Application.UserName = "User 0" Then
For Each ws In Worksheets
ws.Visible = xlSheetVisible
Next
Exit Sub
End If
Set wsAllowed = GetAllowedSheet
wsAllowed.Visible = xlSheetVisible
For Each ws In Worksheets
If ws.Name <> wsAllowed.Name Then
ws.Visible = xlSheetHidden
End If
Next
End Sub
Function GetAllowedSheet() As Worksheet
Select Case Application.UserName
Case "User 1"
Set GetAllowedSheet = Sheets("Sheet1")
Case "User 2"
Set GetAllowedSheet = Sheets("Sheet2")
Case "User 3"
Set GetAllowedSheet = Sheets("Sheet3")
'...
Case Else
'...
End Select
End Function