Excel中的行级安全性 - 我应该使用什么方法:

时间:2016-04-01 07:27:52

标签: excel vba excel-vba

早上的人,

在过去的几天里,我一直试图找到一种方法来实现"伪"使用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 ?

示例:

enter image description here

也许,还有其他方法更适合我的场景,但是我还没能找到它们。 如果你能指出我正确的方向,我将不胜感激。

由于

2 个答案:

答案 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