微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基于矩阵隐藏/取消隐藏Excel工作表

如何解决基于矩阵隐藏/取消隐藏Excel工作表

我有一个可以工作的宏,但是它不是很有效,可以做得更好。

我只是在一行中有一个包含所有工作表名称的列表(它们可能会更改,因此需要动态显示),在下一行中,我回答“是/否”,显示是否应该隐藏工作表

示例:

第1张,第2张,第3张,第4张,

是,是,否,是

到目前为止,我的代码

Sub HidingSheets()

'Checking the first sheet
'-------------------------------------------------------------------------------------------
Sheets(Worksheets("Sheet1").Range("E9").Value).Visible = True
Sheets(Worksheets("Sheet1").Range("E9").Value).Activate

If ActiveSheet.Range("A1") = "NO" Then
    ActiveSheet.Visible = False
End If
'-------------------------------------------------------------------------------------------

'Checking the second sheet
'-------------------------------------------------------------------------------------------
Sheets(Worksheets("Sheet1").Range("F9").Value).Visible = True
Sheets(Worksheets("Sheet1").Range("F9").Value).Activate

If ActiveSheet.Range("A1") = "NO" Then
    ActiveSheet.Visible = False
End If
'-------------------------------------------------------------------------------------------

End Sub

我基本上是对每张纸手动进行操作,而不是循环执行,这还要求我需要在每张纸上显示“是/否”(“ if”公式检查A1 =“ no”)。单元格A1中显示的“是/否”取自我之前解释的矩阵。

注意:矩阵可以“转置”,方向无关紧要。

如果能帮助我,请先谢谢您。

我的第二次尝试是

Sub Hiding2()

Dim i As interger

For i = 1 To 10

    a = ActiveSheet.Range("E9").Value

    If Offset(a(1,0)) = YES Then
        Sheets(a).Visible = True
    Else
       Sheets(a).Visible = False
    End If

Next i

End Sub

但是我不知道如何引用所需的单元格,然后让它们针对每个“ i”移动。

解决方法

您可以使用Cells代替Range。使用它,您可以使用列号在某些范围的列上进行迭代。还有其他退出代码的可能性……这取决于工作表中的数据。

Sub Hiding()
    Dim sh as Worksheet,col as Integer
    For col = 5 to 100
        shName = Worksheets("Sheet1").Cells(9,col).Value
        On Error GoTo TheEnd ' in case there is no such sheet
        Set sh = Worksheets(shName)
        If UCase(sh.Range("A1").Value) = "YES" Then
            sh.Visible = xlSheetVisible
        Else
            sh.Visible = xlSheetHidden
        End If
    Next col
    TheEnd:
End Sub
,
Sub HideWorksheets()
    Dim Cell As Range
    Dim Data As Range: Set Data = Worksheets("Sheet1").Range("E9:N9")
    On Error Resume Next
    For Each Cell In Data
        Worksheets(Cell.value).Visible = IIf(Cell.Offset(1,0) = "YES",xlSheetHidden,xlSheetVisible)
    Next Cell
End Sub

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。