根据多个单元格的值隐藏或取消隐藏工作表

时间:2019-09-19 14:25:51

标签: excel vba

为了工作,我试图弄清楚当您在列中键入特定单词时如何在Excel中创建宏以取消隐藏表格。
我对此完全陌生,因此需要进行大量搜索。

到目前为止,我知道了:

Private Sub Worksheet_Change(ByVal Target As Range)
    If [C2] = "POMP" Then
        Sheets("POMP").Visible = True
    Else
        Sheets("POMP").Visible = False
    End If

    If [C2] = "TANK" Then
        Sheets("TANK").Visible = True
    Else
        Sheets("TANK").Visible = False
    End If

    If [C2] = "VENTILATOR" Then
        Sheets("VENTILATOR").Visible = True
    Else
        Sheets("VENTILATOR").Visible = False
    End If

    If [C2] = "MOTOR" Then
        Sheets("MOTOR").Visible = True
    Else
        Sheets("MOTOR").Visible = False
    End If
End Sub

这只是一个更大项目的一个示例。 到目前为止,它仍然有效。当我在C2中键入MOTOR时,MOTOR的选项卡将取消隐藏。 也为其他。 但是..

实际上,它必须对整个列C起作用,而不仅仅是C2。

有人可以帮我吗?

还有另一个问题。 如果在输入单词时必须取消隐藏2张纸,我该如何将其放入代码中。 例: 我键入MOTOR,然后取消隐藏MOTOR和POMP工作表。

如果您可以帮助我,这将是一个帮助!

1 个答案:

答案 0 :(得分:0)

只需列出您的工作表名称为数组即可。遍历该数组,并使用WorksheetFunction.Match method检查工作表名称是否存在于C列中以隐藏或显示工作表。

请注意,如果在C列中未找到工作表名称,Application.Match将返回错误,因此我们使用它来触发隐藏/显示。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim SheetNames() As Variant
    SheetNames = Array("POMP", "TANK", "VENTILATOR", "MOTOR") 'list your sheet names here

    Dim SheetName As Variant
    For Each SheetName In SheetNames
        Dim MatchedRow As Variant
        MatchedRow = Application.Match(SheetName, Me.Columns("C"), 0)

        On Error Resume Next 'catch error if sheet name does not exist
        ThisWorkbook.Worksheets(SheetName).Visible = Not IsError(MatchedRow)
        If Err.Number <> 0 Then MsgBox "Worksheet '" & SheetName & "' not found!", vbCritical
        On Error GoTo 0
    Next SheetName
End Sub