【问题标题】:VBA hide and show sheets based on YES/NO and worksheet nameVBA根据是/否和工作表名称隐藏和显示工作表
【发布时间】:2021-12-09 03:27:54
【问题描述】:

我有一个包含许多工作表的工作簿。我有一个索引工作表,在 B 列中列出了工作表的名称,在 c 列中有一个是/否问题。我想要一个代码,当我单击“是”时,它将打开它对应的工作表。当我单击“否”时,它将隐藏工作表。列表中的名称与工作表的名称完全匹配。我想它会带有一个循环?

范围从 B27 到 C61

【问题讨论】:

  • 你卡在哪里了?也许研究Worksheet_Change 事件。
  • 当 C 列为“是”时,尝试获取代码以在 B 列中搜索名称。它必须找到同名的隐藏工作表并使其可见
  • ThisWorkbook.Worksheets(Range("B27").Value).Visible = xlSheetVisible?
  • 位不应该是循环吗?
  • 如果您使用Worksheet_Change 事件,则不会。

标签: vba loops hide show


【解决方案1】:

如果我们假设第 2 列包含工作表的名称并且第 3 列包含是或否,那么此代码将执行此操作,使用双击:

Option Explicit

Private Function GetSheet(SheetName As String) As Worksheet
    On Error Resume Next
    Set GetSheet = ThisWorkbook.Sheets(SheetName)
    If Err.Number <> 0 Then
        Err.Clear
    End If
End Function

Private Sub ShowHideClick(Rng As Range, ActivateSheet As Boolean)
    Dim RowNum As Long, ColNum As Long
    Dim YesNo As String
    Dim SheetName As String
    Dim Sht As Worksheet
    
    RowNum = Rng.Row
    ColNum = Rng.Column
    If Not (RowNum >= 27 And RowNum <= 61 And ColNum = 3) Then Exit Sub
    YesNo = Rng
    If YesNo <> "Yes" And YesNo <> "No" Then Exit Sub
    SheetName = Rng.Offset(0, -1)
    Set Sht = GetSheet(SheetName)
    If Sht Is Nothing Then Exit Sub
    If YesNo = "Yes" Then
        If Sht.Visible = xlSheetVeryHidden Then
            Sht.Visible = xlSheetHidden
        End If
        Sht.Visible = xlSheetVisible
        If ActivateSheet Then
            Sht.Activate
        End If
        Rng.Value = "No"
    Else
        If Sht.Visible = xlSheetVisible Then
            Sht.Visible = xlSheetHidden
        End If
        Rng.Value = "Yes"
    End If
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    ShowHideClick Target, True
End Sub

在包含是/否表的工作表中插入代码。

【讨论】:

  • 您好,感谢您的回答:)!我们可以让它不双击,而是当我使用下拉菜单并选择“是”时它会自动打开?另外当它打开时,我们能否确保屏幕不会跳转到新工作表,我希望它停留在工作表 1
  • @Adele 欢迎您。答案是对您提出的问题的回答。它激活它显示的工作表。将调用ShowHideClick 时的布尔值从True 更改为False,以不激活工作表。我们之所以使用双击,是因为其他捕获单击鼠标左键的方法都难以维护或产生效果,用户体验为错误。如果您还有其他问题,您应该创建一个新问题。当您在 stackoverflow 上提出问题时,请记住包含一些代码,以显示您到目前为止所做的工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
相关资源
最近更新 更多