我有一张工作簿,其中第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很新,所以有人请,请告诉我我做错了什么以及如何解决它!
谢谢!
答案 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