【问题标题】:Excel: How can I give different people various levels of protection and accessExcel:如何为不同的人提供不同级别的保护和访问权限
【发布时间】:2015-10-28 18:20:25
【问题描述】:

我有一个 3 种不同类型的人可以访问的 Excel 电子表格,我希望这 3 种类型的人具有不同的访问权限。我希望有完全访问权限的人,所以可以更改工作簿、更改单元格、更改单元格的内容和格式等。有一些访问权限的人,所以只能更改一些单元格并且可以继续任何访问电子表格时可见的工作表,我希望有人访问受限,因此只能在某些工作表上进行,更改检索与该值关联的数据所需的单元格,并且无法保存文件.

有没有办法做到这一点?

我真正想要的是当文件打开时要求用户输入密码,并且根据密码是什么,不同的单元格被锁定并应用不同的访问级别。

【问题讨论】:

  • 在workbook_open事件中,你可以有一个密码输入框,但可能更有效地为application.user做一个if语句?
  • 我的意思是,这是可能的,但用户可以很容易地禁用宏,然后将所有工作表从不同的工作簿转换为 xlSheetVisible,或者将内容复制到不同的工作簿中。关键是,Excel 不是,也从未设计为安全程序
  • 如 cmets 中所述,没有一种非常安全的方法来执行此操作。您可以在打开工作簿时提示输入密码,然后有一些语句说“如果密码为 X,则将这些单元格设置为受保护。如果密码为 Y,则将其他单元格设置为受保护。如果密码为 Z,则将其他单元格设置为受保护。如果不是“X、Y 或 Z,请关闭工作簿”。问题在于它不是很安全。任何有一点 VB 知识的人都可能会通过这种方式......所以做这样的事情可能会让你产生一种虚假的安全感。
  • 这就是我指出的那样使用用户名的原因。消除密码不安全性。以其他人身份登录要困难得多。
  • 所以对这三种情况和一个其他情况做一个案例陈述。你现在只是提到其他......另外,我没有牵你的手,因为1)我有自己的工作要做,2)在SO你应该在寻求帮助之前做出努力。

标签: vba excel passwords password-protection


【解决方案1】:

首先将命名范围分配给您要保护的区域,使用后缀指示如何处理它们。您可以通过选择范围并在公式栏左侧键入一个不是有效单元格地址的名称来做到这一点。

我创建了名为 Someting_4U 的范围,你和我可以编辑它和Something_4Me,只有我可以编辑

现在复制以下代码到主ThisWorkbook模块

Private Sub Workbook_Open()
    Dim Sht As Worksheet, Nm As Name

'取消保护您的工作簿和工作表

    ThisWorkbook.Unprotect "onlyVbaPassWord"
    For Each Sht In ThisWorkbook.Sheets
        Sht.Unprotect "onlyVbaPassWord"
    Next Sht

' 取消保护适当的命名范围并保护其他范围

    For Each Nm In ThisWorkbook.Names

        ' The next `Select Case` statement implements your business logic
        Select Case Application.UserName
            Case "Me", "Myself", "I"
                Nm.RefersToRange.Locked = False
            Case "You", "Yourself", "Thou"
                If Nm.Name Like "*_4U" Then
                    Nm.RefersToRange.Locked = False
                Else
                    Nm.RefersToRange.Locked = True
                End If
            Case Else
                Nm.RefersToRange.Locked = True
        End Select
    Next Nm

'再次保护您的工作表和工作簿

    For Each Sht In ThisWorkbook.Sheets
        Sht.Protect "onlyVbaPassWord"
    Next Sht
    ThisWorkbook.Protect "onlyVbaPassWord"
End Sub

【讨论】:

  • 当然你可以添加更复杂的规则,比如我只能输入文字,你也可以插入行和改变格式,但是这太依赖你的情况了,我猜不到
  • 好的,我已经在模块中找到了代码,我是不是要在关闭文件之前运行代码?当我打开文件时,我没有被要求输入密码?
  • @Ben 无意粗鲁。如果您阅读了 Dirk 编写的代码并希望被提示输入密码,那么坦率地说,这个任务目前可能超出您的范围。上面的代码为您提供了需要合并到其他代码中的聪明点。别人的cmets都是很好的建议。
  • @BenSmith,此代码不属于 a 模块,它属于 ThisWorkbook 模块。见编辑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-16
  • 2015-10-16
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 2020-09-06
  • 2015-03-25
相关资源
最近更新 更多