我有一个Excel工作表,我想根据其他单元格中的值隐藏或取消隐藏某些行。
简而言之:
整个过程应取决于单元格C2
,D2
,E2
中的值。
如果C2
是空白,我想隐藏rows 31 to 40
,如果不是空白,则需要可见。
其他三个单元格相同,始终隐藏/取消隐藏以下10行:
D2 --> rows 41 to 50
E2 --> rows 51 to 60
我尝试了这段代码,但是它不起作用,并且我也没有收到任何错误:
Sub Hide_rows()
If Range("LS!C2") = 0 Then
Rows("31:40").EntireRow.Hidden = True
Else
If Range("LS!D2") = 0 Then
Rows("41:50").EntireRow.Hidden = True
Else
If Range("LS!E2") = 0 Then
Rows("51:60").EntireRow.Hidden = True
Else
If Range("LS!C2") > 0 Then
Rows("31:40").EntireRow.Hidden = False
Else
If Range("LS!D2") > 0 Then
Rows("41:50").EntireRow.Hidden = False
Else
If Range("LS!E2") > 0 Then
Rows("51:60").EntireRow.Hidden = False
Else
End If
End If
End If
End If
End If
End If
End Sub
谢谢!
答案 0 :(得分:5)
在我看来,您只需要以下几行:
With Sheets("LS")
.Rows("31:40").EntireRow.Hidden = (.Range("C2") = 0)
.Rows("41:50").EntireRow.Hidden = (.Range("D2") = 0)
.Rows("51:60").EntireRow.Hidden = (.Range("E2") = 0)
End With
按照克里斯的观点编辑-以下内容就足够了:
With Sheets("LS")
.Rows("31:40").Hidden = (.Range("C2") = 0)
.Rows("41:50").Hidden = (.Range("D2") = 0)
.Rows("51:60").Hidden = (.Range("E2") = 0)
End With
答案 1 :(得分:2)
将此Worksheet_Change事件驱动的子过程放在LS工作表的私有代码表中(右clcik名称选项卡,查看代码),而不是公共模块代码表中。
sub worksheet_change(byval Target as range)
if not intersect(target, range("C2:E2")) is nothing then
on error goto safe_exit
application.enableevents = false
rows("31:40").entirerow.hidden = isempty(cells(2, "C"))
rows("41:50").entirerow.hidden = isempty(cells(2, "D"))
rows("51:60").entirerow.hidden = isempty(cells(2, "E"))
end if
safe_exit:
application.enableevents = true
end sub
对C2:E2所做的任何更改都将触发此子过程,并且将重新评估这些行的隐藏/未隐藏性质。