VBA隐藏特定用户的表单

寻找一些关于VBA用户限制的帮助。 到目前为止,我已经粘贴下面的代码。 它正在完美的工作,但我想build立它。

我拥有它,所以列出的特定用户可以访问该文件,而任何试图访问该文件的人都会收到一个msgbox表示他们没有被授权,然后closures该书。

然而,我希望有些用户可以看到一些表单(他们不应该看到的表单将被xlveryhidden),然后其他用户可以看到列出的其他表单…

即:名称1可以看到表格13,名称2可以看到表格14和表格3名称3可以看到表格22表格23和表格4在安全性方面并不是非常重要,它们都来自同一个团队,但只是为了用户友好和整洁的文件。

 Private Sub Workbook_Open() Dim Users As Variant Dim UName As String Dim UFind As Variant Users = Array("Name1", "Name2", "Name3", "Name4", "Name5") UName = Environ("UserName") On Error Resume Next UFind = WorksheetFunction.Match(UName, Users, 0) If Err <> 0 Then MsgBox "You are not authorised to use this Workbook" ThisWorkbook.Close SaveChanges:=False End If End Sub 

If条件中进行更改如下:

 If Err <> 0 Then MsgBox "You are not authorised to use this Workbook" ThisWorkbook.Close SaveChanges:=False Else For Each ws In Worksheets If ws.Name <> "Sheet" & UFind Then ws.Visible = xlSheetHidden End If Next ws End If 

确保问题中提到的工作表名称是Sheet1,Sheet2,Sheet3,..等。

想出了一个答案,这是非常简单的,不会承受新用户被添加,但在同时,这是可以的…

 Private Sub Workbook_Open() Dim Users As Variant Dim UName As String Dim UFind As Variant Users = Array("Name1", "Name2", "Name3") UName = Environ("UserName") On Error Resume Next UFind = WorksheetFunction.Match(UName, Users, 0) If UName = "Name2" Then Worksheets("Sheet23").Visible = True Worksheets("SHEET17").Visible = True ElseIf UName = "Name1" Then Worksheets("Sheet23").Visible = True Worksheets("SHEET17").Visible = True Worksheets("Sheet4").Visible = True ElseIf UName = "Name3" Then Worksheets("Sheet23").Visible = True Worksheets("SHEET17").Visible = True ElseIf Err <> 0 Then MsgBox "You are not authorised to use this Workbook" ThisWorkbook.Close SaveChanges:=False End If End Sub 

并且为了在closures文件时再次隐藏它们:

 SubPrivate Sub Workbook_BeforeClose(Cancel As Boolean) Worksheets("Sheet23").Visible = False Worksheets("SHEET17").Visible = False Worksheets("Sheet4").Visible = False Worksheets("Sheet1").Visible = False 'If you don't save it's not effective Me.Save End Sub