我在下面的代码中找不到问题,但是它不起作用,因此必须有任何问题。该代码应类似于:
代码是:
Private Sub Worksheet_Change2(ByVal Target As Range)
Dim Rng1 As Range
With Worksheets("Dashboard")
Set Rng1 = ("D18")
If Rng1.Value = "No" Then Sheet.Rows("20:20").EntireRow.Hidden = False
Else: Sheet.Rows("20:20").EntireRow.Hidden = True
End If
End With
End Sub
它什么都不做,请您帮忙查找问题吗?
非常感谢!
答案 0 :(得分:3)
这里有很多问题
Worksheet_Change2
不是工作表事件Set Rng1 = ("D18")
语法无效Sheet
参考您的代码,经过重构
确保将其放在所需工作表后面的代码中
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Me.Range("D18")) Is Nothing Then
If LCase(Me.Range("D18").Value = "no" Then
Me.Rows(20).EntireRow.Hidden = False
Else
Me.Rows(20).EntireRow.Hidden = True
End If
End If
End Sub
答案 1 :(得分:2)
您对范围变量的分配无效(甚至不会编译),并且If语句的语法也无效。
With Worksheets("Dashboard")
Set Rng1 = .Range("D18")
If Rng1.Value = "No" Then
.Rows("20:20").EntireRow.Hidden = False
Else
Sheet.Rows("20:20").EntireRow.Hidden = True
End If
end with
但是,我会将代码压缩为
With Worksheets("Dashboard")
Set Rng1 = .Range("D18")
.Rows("20:20").EntireRow.Hidden = (Rng1.Value <> "No")
End With
我想知道子程序的名称。它看起来像是事件例程的副本(事件例程为Worksheet_Change
,而没有尾随2
)。您什么时候要调用例程?如果您希望每次在工作表中进行某些更改时都执行它,请摆脱多余的2
-但是在这种情况下,您可能只对单元格D18
发生更改的情况感兴趣:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("D18")) Is Nothing Then Exit Sub
With Worksheets("Dashboard")
.Rows("20:20").EntireRow.Hidden = (Target.Value <> "No")
end with
End Sub
答案 2 :(得分:1)
子名称应为Worksheet_Change以触发更改事件。该子可以重写如下
Private Sub Worksheet_Change(ByVal Target As Range)
'Dim Rng1 As Range
Set Target= Range("D18")
With Worksheets("Dashboard")
If Target.Value = "No" Then
.Rows("20:20").EntireRow.Hidden = False
Else
.Rows("20:20").EntireRow.Hidden = True
End If
End With
End sub
由于您正在使用工作表(“仪表板”),因此可以将工作表。行改写为.rows。