Excel 根据单元格值隐藏或取消隐藏图纸

Excel 根据单元格值隐藏或取消隐藏图纸,excel,vba,Excel,Vba,我想写一个关于在Excel中根据单元格的值隐藏或取消隐藏工作表的代码 我已经谈到这一点 Sub Hide_Un() If Range("b4").Value = "yes" Then sheets(2).Visible = True ElseIf Range("b4").Value = "no" Then sheets(2).Visible = False End If If Range("b5").Value = "yes" T

我想写一个关于在Excel中根据单元格的值隐藏或取消隐藏工作表的代码

我已经谈到这一点

Sub Hide_Un()
    If Range("b4").Value = "yes" Then
        sheets(2).Visible = True
    ElseIf Range("b4").Value = "no" Then
        sheets(2).Visible = False
    End If

    If Range("b5").Value = "yes" Then
        sheets(3).Visible = True
    ElseIf Range("b5").Value = "no" Then
        sheets(3).Visible = False
    End If
大约有100张工作表,我不能每次添加新工作表时都执行此过程

我需要一个代码来隐藏或取消隐藏每个工作表,具体取决于我对单元格的声明

示例B1=“是”(可见)或B1=“否”(不可见)

  • 选项比较文本
    使其不区分大小写。这样
    YES
    =
    YES
    。如果没有这一选择,它们将不平等
  • 您可能需要考虑值的选项既不是
    yes
    也不是
    no
    。如果值为
    y
    n
    yes
    并带有滞后空格,该怎么办
  • 如果用户可以选择在书中添加/移动/删除图纸,则使用图纸索引号(
    sheet(n)
    )可能会有问题
  • 看起来行号通过
    sheet#=行-2
    与页码相关。我4点开始循环。最低可能是3-否则,您将试图隐藏一张可能不存在的工作表


  • 将此代码放入ThisWorkbook代码表中

    Option Explicit    
    
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    
        Select Case LCase(Sh.Name)
            Case "toc"
                If Not Intersect(Target, Sh.Range("B:B")) Is Nothing Then
                    Dim t As Range
                    For Each t In Intersect(Target, Sh.Range("B:B"))
                        If t.Row > 3 Then
                            Worksheets(t.Row - 2).Visible = _
                                CBool(LCase(t.Value) = "yes")
                        End If
                    Next t
                End If
            Case Else
                'do nothing
        End Select
    
    End Sub
    

    所以你有一张纸,上面写着哪些纸应该隐藏在B栏?是的,这是核心。这张纸的名字是什么?它有标题吗?我这样问是因为我们需要知道第1行是对应于
    表(1)
    还是
    表(2)
    。第一行是“是”还是“否”?第4行是第一个“是”还是“否”?第一张工作表名为“TOC”。我在macroSub ListSheets()下面运行,将ws作为工作表Dim x作为整数x=3张工作表(“TOC”)。范围(“A:A”)。清除工作表中的每个ws。工作表中的每个ws(“TOC”)。单元格(x,1)=ws。名称x=x+1下一个ws-End Subject!我早些时候发布了一个解决方案,说实话,真是糟透了。想看看你的解决方案-需要分支出简单的循环,我真的很好奇一个90KG如何做到这一点!当然不是一个要求,只要你愿意:)我的错,91.5公斤*过一会儿我会试着看一看。@Jeeped;如果
    B4
    值为“是”,则表示
    Sheet2
    设置为可见。如果用户将
    B4
    值从“是”更改为“否”,工作表是否仍然可见?还是我漏掉了什么东西?如果B4是肯定的,那么<代码>工作表(T.Lo- 2)。可见是错误的。你应该考虑JeePeDS解决方案。如果将状态从“是”更改为“否”或添加新行,则需要为每张图纸重新运行此操作。他的解决方案只检查需要检查的工作表,这样会更有效。。。。。。。。。。预测需求的方法
    Option Explicit    
    
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    
        Select Case LCase(Sh.Name)
            Case "toc"
                If Not Intersect(Target, Sh.Range("B:B")) Is Nothing Then
                    Dim t As Range
                    For Each t In Intersect(Target, Sh.Range("B:B"))
                        If t.Row > 3 Then
                            Worksheets(t.Row - 2).Visible = _
                                CBool(LCase(t.Value) = "yes")
                        End If
                    Next t
                End If
            Case Else
                'do nothing
        End Select
    
    End Sub