请接受我的指导,因为我是自学成才的,并且对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
答案 0 :(得分:0)
这就是您需要做的:
首先在工作表中为要检入Named Range
的行定义一个No
。Named Range
的好处是它是Dynamic
,所以如果添加另一行在第3行之前,它将动态将“命名范围”移动到第4行。
赞:
完成命名范围后,将此代码添加到工作表中:
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
确保代码在正确的工作表上可以正常工作:
这将是完整的动态代码。
答案 1 :(得分:0)
希望更快一点
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