我在单元格“I2”和隐藏名称范围中有一个下拉列表。
我愿意:
如果在“I2”单元格中选择 1,则显示名称范围 1。
如果在“I2”中选择 2,则显示名称范围 1 和名称范围 2。
如果在“I2”中选择 3,则显示名称范围 1 和名称范围 2 和名称范围 3,依此类推。
我可以对所有 30 种可能的组合使用 If 语句,但这会是重复的。
If Worksheets("sheet1").Range("I2").Value = 1 Then
Range("NameRange1).EntireRow.Hidden = False
Range("NameRange2).EntireRow.Hidden = True
Range("NameRange3).EntireRow.Hidden = True
.... and so on
有没有一种有效的方法来例如循环范围以隐藏取消隐藏所需的行?
也许我可以使用一个单独的过程来根据单元格“I2”中的值“动态”创建行(第 6 行、第 7 行、第 8 行等)。这样我就可以立即创建所需的行。
以下例程将显示达到特定数字的范围并隐藏所有其他数字。它将循环遍历所有范围并检查范围编号是否大于给定的数字
showUntilRange
。由于 hidden
属性是布尔值,因此您可以简单地使用术语 (i > showUntilRange)
。
Sub showHideRanges(showUntilRange As Long)
Const rangeCount As Long = 30
Const rangeNamePrefix As String = "NameRange"
Dim i As Long, rangeName As String, r As Range
For i = 1 To rangeCount
rangeName = rangeNamePrefix & i
On Error Resume Next
Set r = Nothing
Set r = Range(rangeName)
On Error GoTo 0
If r Is Nothing Then
Debug.Print "couldn't find range " & rangeName
Else
r.EntireRow.Hidden = (i > showUntilRange)
End If
Next i
End Sub
您的活动例程可能如下所示:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("I2")) Is Nothing Then Exit Sub
showHideRanges CLng(Target)
End Sub
尝试这样的事情:
Dim rStart As Integer
Dim rEnd As Integer
Dim i As Integer
rStart = Range("NameRange1").Row
rEnd = Range("NameRange30").Row
For i = rStart To rEnd
Range("NameRange" & i).EntireRow.Hidden = (i = Range("I2").Value)
Next i
For .. Next Loop
循环遍历所有命名范围。如果名称与下拉单元格的值匹配,则显示整行。如果匹配失败,则隐藏整行。