Hiding/unhiding excel 个基于矩阵的工作表

Hiding/unhiding excel sheets based of a matrix

我有一个可以使用的宏,但效果不是很好,可以做得更好。

我只是有一个包含所有 sheet 名称的列表(它们可以更改,因此它需要是动态的)在一行中,在下一行中我有一个显示的“yes/no”答案sheet 是否应该隐藏。

示例:

Sheet1,sheet2,sheet3,sheet4,

是,是,不是,是

到目前为止我的代码:

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

我基本上每个 sheet 手动执行它而不是循环,这也要求我需要在每个 sheet 中显示“yes/no”(“if”公式检​​查 A1 =“否”)。 A1单元格显示的“yes/no”是我之前解释的矩阵中的

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

如果你能帮助我,先谢谢你了。

我的第二次尝试是这样的:

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