通过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
请让我知道这是如何适用于你! 🙂