我想设置一个宏来将 Excel 文件限制为列表中的特定用户

我想设置一个宏来将 Excel 文件限制为列表中的特定用户

我有一个 Excel 文件,我想限制它仅供特定用户查看,因为有多个文件,所以我想设置一个宏,将文件限制为我将在列表中提供的特定用户。

答案1

你不想这么做。

为了防止用户打开文件,要求他们打开文件以便运行宏(如果打开文件的用户不正确,则立即关闭文件)。
除了让用户感到烦恼之外,没有安全的方法,如果用户在未启用宏的情况下启动文件,则宏无法运行,文件将正常打开。

相反,根据您使用的技术,寻找阻止访问文件本身的方法。大多数文件共享解决方案都可以很好地管理访问。

答案2

“保护”Excel 中的密码对于经验一般的 VBA 用户来说毫无保护作用。很容易通过现成的密码破解程序绕过。

如果您能确定所有用户都是新手,那么有一些策略可以让您的工作簿访问特定用户组,同时排除其他所有用户。由于您没有显示任何代码,我将提供一些提示,但将其修补成可行的解决方案则留给您。

使用不同的密码保护您的工作簿和 VBA 项目。 因此,用户需要 2 个单独的密码才能进入您的隐藏工作表。

每次保存之前隐藏除“启用宏”工作表之外的所有工作表。 隐藏是指将工作表Visible属性设置为xlVeryHidden。此设置会屏蔽主页 > 格式 > 隐藏和取消隐藏 > 工作表的工作表名称。右键单击工作表选项卡将使该Unhide...选项变灰。这使得普通用户甚至很难看到隐藏的工作表。如果您对工作表应用工作表保护,则它们的名称可能会暴露在 Backstage 中。

构建一个函数来转换 Windows 用户名转换为由名字的首字母和姓氏的前 7 位数字组成的 8 个字符的字符串,忽略姓氏中的空格。我使用:

Function UserShortName()
    User = Application.UserName
    If InStr(1, User, " ") Then
        UserShortName = LCase(Left(Left(User, 1) _
        & Replace(Mid(User, InStr(1, User, " ") + 1), " ", ""), 8))
    Else
        UserShortName = User
    End If
End Function

我不使用,Apllication.UserUame因为它可以很容易地改变以冒充其他人。

构建一个表/范围或一个 UserShortNames 代码数组允许的用户数。

有一个VisibilitySettings程序可以从Workbook_AfterSaveWorkbook_Open事件中调用。此子程序应UserShortName针对 AllowedUsers 表/范围/硬编码名称进行测试。 VisibilitySettings将使选定的工作表可见。

当用户打开工作簿时,如果未启用宏,他们会看到“启用宏”。如果启用了宏,他们会看到您允许的任何内容VisibilitySettings

答案3

下面显示的 VBA(宏)代码将帮助您创建一个工作簿,将自动检查Window Logged in users,并允许或禁止访问该工作簿。

Private Sub Workbook_Open()

Application.AutomationSecurity = msoAutomationSecurityLow

Dim user As String
Dim users(4) As String

users(0) = "User1"
users(1) = "User2"
users(2) = "User3"
users(3) = "User4"


user = Application.UserName

Dim access As Boolean
Dim i As Integer

access = False

For i = 0 To 4
    If users(i) = user Then
        access = True
        Exit For
    End If
Next

If access = False Then
    MsgBox ("Opps, user """ & "user" & """ does not have access to open this workbook")
    ActiveWorkbook.Close
End If

End Sub

注意:

  • 将工作簿另存为Excel 宏启用工作簿.Xlsm扩展。
  • 如果使用禁用宏文件选项信任中心,宏设置或通过任何方法,则此代码行将启用宏。

Application.AutomationSecurity = msoAutomationSecurityLow

  • 在代码中,User Names都是可编辑的并且所有内容都必须与该特定计算机的 Windows 用户配置文件相似。

相关内容