【问题标题】:Hide excel worksheet via VBA通过 VBA 隐藏 Excel 工作表
【发布时间】:2017-03-28 01:01:21
【问题描述】:

我有一个工作簿,其中包含许多工作表,每个工作表上都有一个合作者姓名(Windows 登录用户名)。

我尝试通过 VBA 循环遍历所有工作表,以匹配实际的 Windows 登录用户名与匹配的工作表,匹配完成后,只有该工作表保持可见(所有其他工作表都被隐藏)。

我已经部分做到了这一点,但我只能在找到匹配的工作表之前做到这一点。例如,如果匹配的用户名是第三个工作表(例如总共十个),则代码会停在那里。我希望它遍历所有工作表,然后才隐藏不匹配的工作表。

首先我有以下模块:

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

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

谢谢, 维托

【问题讨论】:

  • 您的代码是否链接到特定工作表?

标签: vba excel


【解决方案1】:

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

只需遍历所有工作表并将每个工作表与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

【讨论】:

  • 如果要对不同用户隐藏其他工作表,我会使用 xlSheetVeryHidden 阻止他们简单地取消隐藏。
  • @TimWilkinson 我知道这个选项(我经常使用它),但要遵守 PO 请求,反正我也有这个选项
  • @VitorBarreto 不确定您为什么改变了答案?因为我的代码更干净,更容易使用
【解决方案2】:

请参见下文:稍微修改一下您的代码。您不需要定义工作表名称。这是模块级别的,您可以照常在工作簿打开事件中调用它

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

请告诉我这对您有什么作用! :)

【讨论】:

  • 感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多