早上的人,
在过去的几天里,我一直试图找到一种方法来实现"伪"使用VBA宏在Excel中的行级安全性。 我需要的是根据Windows用户凭据过滤我的所有Excel表。问题是我不知道如何解决这个问题,这是我到目前为止唯一的想法:
1.Derive the NT account and store it in namedrange
2. Use autofilter based on NamedRange for each table in my spreadsheet
3. Delete / Hide the unnecessary rows ?
示例:
也许,还有其他方法更适合我的场景,但是我还没能找到它们。 如果你能指出我正确的方向,我将不胜感激。
由于
答案 0 :(得分:1)
要在Excel中实现行级安全性,首先应避免在Excel中检索数据。因为如果使用vba进行过滤,一些用户很容易绕过它。所以它不能被称为 security 。
答案 1 :(得分:1)
这可以通过将以下内容粘贴到特定WorkBook VBA项目中的 ThisWorkBook 模块中来实现。只需记住将WorkBook保存为.dotm
即可正如J.Chomel所提到的,绕过WorkBook密码并不是最困难的事情,你可以在网上找到一个宏。
显然,您还需要密码保护您的VBA项目,以防止用户从那里访问WorkBook密码。
Private Sub Workbook_Open()
Dim CurrentUserName As String
CurrentUserName = Environ("Username")
Dim WorkBookPassword As String
'Replace password with your desired password
WorkBookPassword = "password"
Dim DataWS1 As Worksheet
'Replace Sheet1 with your specific sheet name
Set DataWS1 = ThisWorkbook.Sheets("Sheet1")
With DataWS1
.Unprotect WorkBookPassword
If .AutoFilterMode Then .AutoFilterMode = False
.UsedRange.AutoFilter Field:=3, Criteria1:=CurrentUserName
.Protect Contents:=True, _
AllowFiltering:=False, _
UserInterfaceOnly:=True, _
Password:=WorkBookPassword
End With
End Sub