根据特定于每个集合的一个值隐藏/取消隐藏行集

时间:2018-02-08 21:57:34

标签: excel vba excel-vba

我有一张工作簿,其中第1页从第5页获取输入,我希望第1页上的一部分行自动隐藏/取消隐藏,具体取决于是否在工作表5上输入了某些内容。例如,工作表5上的单元格D6是一个名称输入,当我输入一个名称(约翰史密斯)时,该文本也填充在表格1上的单元格A5中,A6:A14是包含有关John Smith的数据的行。如果工作表5,单元格D6为空白,我希望工作表1,A5:A14自动隐藏,直到我在D6中输入名称。然后重复相同的模式,但每个部分使用不同的单元格引用。像这样:

第1节: 表5输入:D6 表1:A5 = Sheet5!D6,隐藏/取消隐藏的行:A5:A14

第2节: 表5输入:F6 表1:A16 = Sheet5!F6,隐藏/取消隐藏的行:A16:A25

第3节: 表5输入:H6 表1:A27 = Sheet5!F6,隐藏/取消隐藏的行:A27:36

等等10个部分,然后模式略有变化。但我想如果我能弄清楚如何重复一种模式,那么我可以将相同的方法应用于任何其他模式。

我在这个论坛上找到了两个代码(并稍微修改了一下),这些代码适用于一个部分,但我无法弄清楚如何为另一个部分重复这个过程(相同的模式,不同的单元格引用)。

第一个代码:

Option Explicit
Private Sub Worksheet_Activate()
    Dim r As Range, c As Range, h As Range
Set r = Range("a5")
Set h = Range("a5:a14")
Application.ScreenUpdating = False
For Each c In r
    If Len(c.Text) = 0 Then
        h.EntireRow.Hidden = True
    Else
        h.EntireRow.Hidden = False
    End If
Next c
Application.ScreenUpdating = False
End Sub

第二段代码

Private Sub Worksheet_Activate()
    Dim r As Range
Set r = Range("a5")
    If Len(r.Text) = 0 Then
        Rows("5:14").EntireRow.Hidden = True
    Else
        Rows("5:14").EntireRow.Hidden = False
    End If
End Sub

我尝试添加更多这样的范围:     Dim r1 As Range,r2 As Range 和这样:     昏暗的r(1到10) 但没有运气!我对VBA很新,所以有人请,请告诉我我做错了什么以及如何解决它!

谢谢!

2 个答案:

答案 0 :(得分:1)

这是一种方法 - 您可以向数组v添加更多范围地址。

Private Sub Worksheet_Activate()

Dim v As Variant, i As Long

v = Array("A5", "A16", "A27")

For i = LBound(v) To UBound(v)
    Range(v(i)).Resize(10).EntireRow.Hidden = (Len(Range(v(i))) = 0)
Next i

End Sub

答案 1 :(得分:0)

将此代码放入" Sheet5"代码窗格

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("D6, F6, H6")) Is Nothing Then Exit Sub ' do nothing if changed cells are not relevant

    Dim cell As Range
    For Each cell In Target ' loop through changed cell
        Worksheets("Sheet1").Cells(5 + 0.5 * (cell.Column - 4) * 11, 1).Resize(10).EntireRow.Hidden = IsEmpty(cell) 'change Sheet1 rows visibility according to current changed cell column and value
    Next
End Sub