我有一个 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_AfterSave
和Workbook_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 用户配置文件相似。