![](/img/trans.png)
[英]Automatically Hide/Unhide Column's based on value in row that is formula transposed from another worksheet
[英]How to automatically hide column based on row value, which is based on an if function from an opposing worksheet?
因为我是自学成才的,并且对VBA编码还很陌生,所以请多多包涵。
我需要有关工作项目代码的帮助,该代码可以基于该列中的行值自动/动态地隐藏该列。 在我的示例中,基于备用工作表中的“是/否”数据验证列表,当前工作表将更新并返回相同的“是”或“否”值。 如果答案为“否”,则当用户从“数据验证”列表中选择该选项后,我需要该列自动消失。
数据集如下:是/否结果在行3中的列范围B:AR
。 第3行的结果是来自另一个工作表的转码公式的结果。
如果编码是真正动态的,则加分点在于,如果我在第3行上方添加行,则代码将自动移至第4行。
我已经搜索了Google领域,大多数代码要么没有更新,要么非常缓慢。 我尝试过的几个代码示例如下:
Sub Hide_Columns_Containing_Value()
Dim c As Range
For Each c In Range("B3:AR3").Cells
If c.Value = "No" Then
c.EntireColumn.Hidden = True
End If
Next c
End Sub
所以这是您需要做的:
首先在工作表中为要在其中检查No
的行定义一个Named Range
。 Named Range
好处是它是Dynamic
,因此,如果在第三行之前添加另一行,它将动态将命名范围移动到第四行。
像这样:
在完成命名范围后,将此代码添加到工作表中:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("roww")) Is Nothing Then
For Each cel In Range("roww")
If cel.Value = "No" Then Columns(cel.Column).EntireColumn.Hidden = True
Next
End If
End Sub
-将第二个代码添加到第一个下面。
Sub hdd()
For Each cel In Range("roww")
If cel.Value = "No" Then Columns(cel.Column).EntireColumn.Hidden = True
Next
End Sub
确保代码在正确的工作表上可以工作:
这将是完整的动态代码。
希望更快一点
Sub Hide_Columns_Containing_Value( _
ByVal msg As String, _
ByVal r As Range)
Dim c As Range
Set c = r.Find(msg)
If Not c Is Nothing Then
c.EntireColumn.Hidden = True
End If
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.