根据另一个工作表中的单元格条件自动隐藏列
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"
地址)。
我是 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"
地址)。