通过VBA隐藏Excel工作表

我有一个工作簿,它有许多工作表,每个工作表上都有一个共同的名字(Windowslogin用户名)。

我已经尝试通过VBA循环所有工作表来匹配实际的Windowslogin用户名与匹配的工作表,并且匹配完成后,只有该工作表保持可见(其他所有人都是隐藏的)。

我设法做到这一点,但我只能做到它直到find匹配的工作表。 例如,如果匹配的用户名是第三个工作表(例如总共十个),代码就停在那里。 我希望它贯穿所有工作表,然后只隐藏不匹配的工作表。

首先我有以下模块:

Sub WorksheetFilter() Dim Username As String Dim Worksheetname As String Worksheetname = ActiveWorkbook.ActiveSheet.Name Username = Environ("Username") If Worksheetname <> Username Then ActiveSheet.Visible = False End If End Sub 

然后,我调用Workbook_Open()事件上的前一个模块:

 Option Explicit Dim WS As Worksheet Private Sub Workbook_Open() For Each WS In ActiveWorkbook.Worksheets WorksheetFilter Next End Sub 

有关如何实现这一点的任何提示?

谢谢,Vítor

使用下面的代码,并将其放在Workbook_Open事件下的Workbook_Open模块中。

只需循环浏览所有表格,并将每个表格与username进行比较。

 Option Explicit Public Sht As Worksheet Private Sub Workbook_Open() For Each Sht In ThisWorkbook.Sheets If Sht.Name = Environ("Username") Then Sht.Visible = xlSheetVisible Else Sht.Visible = xlSheetHidden ' option 2: use very hidden, only able to unhide through code (unable to unhide using right-click) 'Sht.Visible = xlSheetVeryHidden End If Next Sht End Sub 

请参阅下面的内容:将代码切碎一点。 您不需要定义工作表名称。 这是针对模块级别的,您可以按照惯例在工作簿打开事件中调用它

 Option Explicit Dim ws As Worksheet Dim Username As String Sub WorksheetFilter() Username = Environ("Username") For Each ws In ActiveWorkbook.Worksheets If ws.Name <> Username Then ws.Visible = False Else ws.Visible = True End If Next ws End Sub 

请让我知道这是如何适用于你! 🙂