现在......我有一个包含5个标签的工作簿。在标签1(仪表板)上,我有四个按钮 - 每个按钮基本上是指向其他四个按钮之一的链接。使用按钮的原因是只有对工作簿具有“admin”权限的用户才能更改其他四个选项卡上的数据。
不应允许所有其他用户更改其他四个标签上的任何数据。这是一个“看起来但不接触”的政策。哦 - 为了使它复杂一点,我们决定他们应该能够在每个工作表上更改一列。
因此。这是一个共享的工作簿。我的代码:
Private Sub cmdViewHistology_Click()
If UserPermsLevel = "High" Or UserPermsLevel = "Super" Then
Worksheets("Histology and Cytology").Visible = True
Worksheets("Histology and Cytology").Activate
Exit Sub
ElseIf (UserPermsLevel = "Normal" Or UserPermsLevel = "Normal and UserName") Then
Worksheets("Histology and Cytology").Visible = True
Worksheets("Histology and Cytology").Range("A:I").Locked = True
Worksheets("Histology and Cytology").Range("J:J").Locked = False
Worksheets("Histology and Cytology").Protect DrawingObjects:=False, Contents:=True, Scenarios:=False
Worksheets("Histology and Cytology").Activate
Else
MsgBox "Sorry, this command is not available."
End If
End Sub
它不起作用。因为它是共享的,我知道我无法保护这张纸 - 这是一种耻辱。问题是......我需要那些管理员用户能够改变一切,我需要其他人能够看到但不能触摸!
所以...有没有人可以使用替代方法?目前,我的解决方法是禁用四个按钮,并给他们一个无序的消息,这不会赢得任何好处......
真的希望有人有一个明智的想法,这将帮助我走出这个洞!
感谢你
答案 0 :(得分:1)
如果您知道管理员用户(或非管理员,无论哪个更容易)的Windows登录信息,您可以使用Environ("Username")
来核对已批准用户的列表。
在工作表的更改事件中,找出正在更改的单元格,如果不允许,请检查该特定用户是否有权这样做。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim EditableRange As Range
Dim Intersect As Range
Set EditableRange = Range("A1") ' Set your range appropriately...
Set Intersect = Application.Intersect(EditableRange, Target)
If Intersect Is Nothing Then
'If this is not in the list of editable cells, then check for admin status
If UserPermsLevel <> "High" And UserPermsLevel <> "Super" Then
Application.EnableEvents = False
Application.Undo 'Undo the edits the user made
Application.EnableEvents = True
MsgBox "Sorry, this command is not available."
End If
'Implied else: allow change
End If
'Implied else: allow change
End Sub
此外,您需要在每个“不可编辑”选项卡上设置此代码,或将其放在单独的模块中,然后由每个选项卡上的Private Sub Worksheet_Change(ByVal Target As Range)
调用,而不是代码切换可见标签的按钮。
答案 1 :(得分:1)
如果ActiveCell.Column是您想要允许的任何内容并且取消保护工作表,则可能检查SelectionChange事件,任何其他列都会声明保护。除了管理员以外,其他所有人都要锁定。 - 我的意思是建议@Gaffi检查UserPermsLevel是一个好主意,也可以合并