gpt4 book ai didi

excel - 如何在案例陈述中引用多张工作表

转载 作者:行者123 更新时间:2023-12-03 14:32:35 24 4
gpt4 key购买 nike

目标和问题

我的目标是根据当前使用 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)

我在谷歌上做了一些研究,但似乎没有什么能与我正在寻找的东西完全匹配。

代码
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

最佳答案

正如@BigBen 建议的那样,隐藏/取消隐藏不是最好的方法,因为它很容易被绕过。

另外,我不知道该工作簿中是否还有其他影响工作表的宏,但是在编码时处理隐藏的工作表可能会让人头疼。

但无论如何,这样的事情可能会有所帮助。

Private Sub Workbook_Open()
'A workbook must have always at least 1 visible worksheet
Application.ScreenUpdating = False


Dim DictWK As Object
Dim UserLevel As Byte
Dim wk As Worksheet

Set DictWK = CreateObject("Scripting.Dictionary")

With ThisWorkbook
DictWK.Add .Worksheets("ONLY ADMIN").Name, 0 '0 because only admin can have it
DictWK.Add .Worksheets("ADMIN AND HEADERS").Name, 1
DictWK.Add .Worksheets("ASSISTANTS").Name, 2
DictWK.Add .Worksheets("EVERYBODY").Name, 99 'A workbook must have at least 1 visible worksheet, so make sure there is 1 always visible to everybody
End With

UserLevel = LVL_ACCESS("User 1") 'change this to however you detect the username

For Each wk In ThisWorkbook.Worksheets
If UserLevel <= DictWK(wk.Name) Then
wk.Visible = xlSheetVisible
Else
wk.Visible = xlSheetHidden
End If
Next wk

DictWK.RemoveAll
Set DictWK = Nothing
Application.ScreenUpdating = True
End Sub

用户等级:
Function LVL_ACCESS(ByVal vUsername As String) As Byte
Select Case vUsername
Case "User 1"
LVL_ACCESS = 0
Case "User 2"
LVL_ACCESS = 1
Case "User 3"
LVL_ACCESS = 2
Case Else
'not recognized, no access
LVL_ACCESS = 99
End Select
End Function

将示例上传到 Gdrive: https://drive.google.com/open?id=1mI3LQd8QxLDlMl1bzz5hCFIwdOFCS2Nc

关于excel - 如何在案例陈述中引用多张工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60191334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com