2017-01-22 43 views
2

我已经有一个宏下面的单击一个按钮取消隐藏工作表和工作正常。不过,我希望更改此宏,以便只有两个用户(其用户名是“JSMITH”和“DTAYLOR”)能够取消隐藏名为“Rates”的表。如何只允许特定的用户取消隐藏工作表

如果其他人(其用户名不是上述两个中的任何一个)试图取消隐藏工作表,我希望Excel显示“您无权打开该邮件”的消息。此外,我需要确保只有那两个用户能够以传统方式取消隐藏(例如,通过右键单击可见工作表选项卡并选择取消隐藏或从任何工作表选项卡中选择格式,工作表,然后取消隐藏)。

你能否建议如何修改下面的代码来完成上述所有内容?

我想出了这一点,但它不工作:

Sub GoToRates_WS() 

Select Case Environ$("username") 

Case "jsmith", "taylor" 

Worksheets("Rates").Visible = True 
ThisWorkbook.Sheets("Rates").Activate 
Case Else MsgBox "you're not authorised to open this" 
End Select 

End Sub 
+0

你用“jsmith的”或“泰勒”作为您的Windows登录? –

回答

3

1-打开ThisWorkbook代码模块。

2-在它的顶部这一行粘贴:

Private RatesVisibile As Variant 

3-找到以下程序:

RatesVisibile = Worksheets("Rates").Visible 

Private Sub Workbook_Open() 
... 
... 
End Sub 

只是行前End Sub插入下面一行

4-删除旧程序GoToRates_WS

5将以下代码复制,并在代码模块的糊底:

Private Function privilegedUser() As Boolean 
    Select Case UCase(Environ$("username")) 
     Case "JSMITH", "DTAYLOR" 
      privilegedUser = True 
     Case Else 
     End Select 
End Function 

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) 
    RatesVisibile = Worksheets("Rates").Visible 
End Sub 

Private Sub Workbook_SheetActivate(ByVal Sh As Object) 
    If Sh.Name <> "Rates" Then 
     RatesVisible = Worksheets("Rates").Visible 
     Exit Sub 
    End If 
    If privilegedUser Then 
     RatesVisible = Worksheets("Rates").Visible 
    Else 
     Worksheets("Rates").Visible = RatesVisible 
    End If 
End Sub 

Private Sub GoToRates_WS() 
    If privilegedUser Then 
     RatesVisible = xlSheetVisible 
     Worksheets("Rates").Visible = xlSheetVisible 
    Else 
     MsgBox "You are not authorized to open this worksheet" 
    End If 
End Sub 
+0

嗨,埃琳娜。首先将'GoToRates_WS'例程更改为'Public'(而不是私有)。然后在表单的代码中创建一个Button_Click事件处理程序(在设计模式下双击该按钮,它将生成它并带你到那里)。在处理程序内部,只需将这行代码放入:ThisWorkbook.GoToRates_WS() ' –

+0

'UserForm1'中的所有内容都是这样的:'Private Sub CommandButton7_Click()ThisWorkbook.GoToRates_WS End Sub'(假设你的按钮的形式叫做CommandButton7)没有其他的东西 –

+0

但是在ThisWorkbook中,改变声明'GoToRates_WS'为此:'Public Sub GoToRates_WS()'(将private改为public)。 –