根据另一个工作表中的单元格条件自动隐藏列

Auto-hiding columns based on cell criteria in another worksheet

我是 VBA 编码的新手,到目前为止,我已经成功地在工作簿中创建了范围界定 sheet,其中 hides/unhides 选项卡基于工作簿用户对 [=20] 的响应=] 问题。

我需要进一步完善工作簿,以便范围选项卡中提供的 yes/no 响应导致 auto 隐藏其他 sheet 中的列秒。使用本网站上的先前线程,我在其中一个选项卡上使用了此代码(显然已针对我自己的单元格引用进行了修改):

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B" Then
        Select Case Target.Value
        Case Is = "Cast"
            Columns("f").EntireColumn.Hidden = False
            Columns("d").EntireColumn.Hidden = True
            Columns("e").EntireColumn.Hidden = True
        Case Is = "LDF"
            Columns("f").EntireColumn.Hidden = True
            Columns("d").EntireColumn.Hidden = False
            Columns("e").EntireColumn.Hidden = False
        Case Is = "Select ROV Type"
            Columns("f").EntireColumn.Hidden = False
            Columns("d").EntireColumn.Hidden = False
            Columns("e").EntireColumn.Hidden = False
        End Select

在 B6 中,我有一个从范围选项卡中提取的公式 (=Name)。虽然上面的代码有效,但它只在我手动输入单元格以重新提取数据时这样做......任何提示: - 绕过单元格引用,链接到我的宏中的原始范围选项卡;和 - 自动隐藏列?

最简单的做法似乎是在需要的地方像这样编辑代码:

Sheet2.Columns("f").EntireColumn.Hidden = False

Sheet2 是 sheet,其中的列应该被隐藏。

如果我正确地解释了您的需求,则如下所示

在 "ThisWorkbook" 代码窗格中放置以下代码:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    Application.EnableEvents = False
    With Sheets("scoping sheet") '<== here you set which sheet you want to monitor
        If .Range("B6") <> .Range("A1") Then '<== check if the "formula" cell changed its previous value, stored in the "echo" cell ("A1")

            Select Case .Range("B6").Value
                Case Is = "Cast"
                    .Columns("f").EntireColumn.Hidden = False
                    .Columns("d").EntireColumn.Hidden = True
                    .Columns("e").EntireColumn.Hidden = True
                Case Is = "LDF"
                    .Columns("f").EntireColumn.Hidden = True
                    .Columns("d").EntireColumn.Hidden = False
                    .Columns("e").EntireColumn.Hidden = False
                Case Is = "Select ROV Type"
                    .Columns("f").EntireColumn.Hidden = False
                    .Columns("d").EntireColumn.Hidden = False
                    .Columns("e").EntireColumn.Hidden = False
            End Select

            .Range("a1") = .Range("b6") '<== update the "echo" cell value for subsequent checking

        End If
    End With
    Application.EnableEvents = True

End Sub

如您所见,您必须在 "scoping" sheet 中选择一个 "echo" 单元格,它将用于存储其 "B6" 单元格的先前值。

在我的代码中,我选择单元格 "A1" 作为 "scoping" sheet 中的 "echo" 单元格,但您可以选择任何您需要的地址,前提是它是 [=28] =] 单元格(即:您的代码和用户不会使用它写入)并相应地更改代码(即 If .Range("B6") <> .Range("A1") Then 语句中的 "A1" 地址)。