使工作表仅对某些用户可见

时间:2019-01-22 16:21:27

标签: excel vba

我需要您的建议,因为我无法弄清楚该如何工作。我有一个工作表,该工作表以登录表单开头来询问用户身份。现在,基于此用户名,我想只允许某些工作表可见,其余的隐藏。但是,我再也无法输入用户名,或者用户名有效,但所有工作表都可见-我如何使其正常工作?

由于我无法使其对某些用户有效,因此我尝试在下面的代码中查看是否可以将工作表限制为所有用户使用,但是即使这样也无法正常工作。在将我的头撞到墙上之前,请教您的建议,在此先感谢您的帮助:)))

Option Explicit

Private Sub Login_Initialize()
End Sub

Private Sub Label1_Click()

End Sub

Private Sub LoginButton_Click()
If Me.IntranetID.Value = "Admin" Or Me.IntranetID.Value = "user1" Or Me.IntranetID.Value = "user2" Or Me.IntranetID.Value = "user3" then
LoginFlag = True

Worksheets("excel1").Visible = True
Worksheets("excel2").Visible = True
Worksheets("excel3").Visible = True
Worksheets("excel4").Visible = True

Dim strIntranetID As String
Dim strText As String
Dim wksDestination As Worksheet

strSheetName = IntranetID.Value
Set wksDestination = Worksheets("Excel1")
strText = IntranetID.Text
wksDestination.Activate
wksDestination.Range("B46").Value = strText

Worksheets("Excel2").Activate "this is to make the user to start from the main sheet"

Unload Me
Exit Sub
End If
MsgBox "You are not authorised to use this Workbook"
End Sub
Private Sub UserForm_Click()
End Sub

我希望上面的代码仍然允许1)登录表单2)允许用户仅看到某些工作表,即用户1可以看到Excel 2和Excel 3等。 3)我希望用户从Excel 2开始,因为它是主要工作表。

1 个答案:

答案 0 :(得分:0)

必须始终至少可见一张纸-因此创建空白纸以显示给未经授权的用户。您需要在工作簿关闭时运行一个例程,以隐藏除该工作表以外的所有内容。然后On_open显示登录表单并询问ID。根据该响应,显示适当的工作表并隐藏默认工作表

 Sub WorkBook_Open()
 UserForm("login").Show
 End Sub

 Sub WorkBook_BeforeClose()
 Dim ws as worksheet
 For each ws in worksheets
     select case ws.index 
          case is =  1  'assume default sheet is index 1
              ws.visible = xlsheetvisible
          case else
              ws.visible = xlsheetveryhidden
      end select
   next ws
  end sub

在表单中,您可以使用类似的过程来隐藏和取消隐藏工作表-请记住,必须始终有一个工作表可见,因此在使工作表可见之前,请不要尝试隐藏任何内容。

如果要确保用户不要简单地从那里取消隐藏工作表,还需要用密码保护VBA编辑器。