在另一个工作表中根据单元格标准自动隐藏列

我是VBA编码的新手,迄今为止已经成功设法在工作簿中创build一个范围表,根据工作簿用户对是/否问题的回答隐藏/取消隐藏标签。

我需要进一步改进工作簿,以便在“范围”选项卡中提供的“是/否”响应导致自动隐藏其他工作表中的列。 使用本网站上的以前的线程,我使用这个代码(显然修改为我自己的细胞参考)在其中一个选项卡上:

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$6" 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中,我有一个公式(=名称)从范围选项卡中拉出。 虽然上面的代码工作,但只有在我手动进入单元格重新拉动数据…任何提示: – 链接到我的macros原始范围选项卡,绕过单元格引用; 和 – 自动化列隐藏?

最简单的事情似乎是这样编辑你的代码,在需要的地方:

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

Sheet2是工作表,其中列应隐藏。

如果我正确地解释你的需求,如下所示

在“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 

如您所见,您必须在“范围”表单中select一个“回显”单元格,该单元格将用于存储“B6”单元格的前一个值。

在我的代码中,我在“范围”表中select了单元格“A1”作为“回显”单元格,但是您可以select任何你需要的地址,只要它是一个“空闲”单元格(即:你的代码和用户不会使用它写入)并相应地更改代码(即, If .Range("B6") <> .Range("A1") Then语句中的"A1"地址)。