Excel 根据单元格值隐藏或取消隐藏图纸
我想写一个关于在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
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