我是VBA的新手,我想知道如何结合使用2个worksheet_change脚本,或者是否应该使用其他东西。
我有一个下拉列表,当选择该列表时,它会依赖于另一个下拉列表。
对于第一个下拉菜单,我有用于过滤列的代码,以便其他列被隐藏。第3行中有几列具有相同的文本,从而使多个列与第一个下拉列表相关联。下面的代码对B2正常。
用户可能会在第一个下拉菜单处停止,但是如果他们然后选择第二个下拉菜单,则我需要电子表格进一步过滤列,因此仅显示一个列。标题位于第4行。
目前我有:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$2" Then
Dim the_selection As String
Dim the_group As String
the_selection = Sheet1.Range("B2")
Dim Rep as Integer
For Rep = 5 to 100
the_column = GetColumnLetter_ByInteger(Rep)
the_group = Sheet1.Range(the_column & "3")
If the_selection = the_group Then
Sheet1.Range(the_column & ":" & the_column).EntireColumn.Hidden = False
Else
Sheet1.Range(the_column & ":" & the_column).EntireColumn.Hidden = True
End If
Next Rep
End If
End Sub
如果我尝试为C2下拉列表创建Worksheet_SelectionChange,则可以正常工作,但是我必须单击该单元格之外的位置,然后再次单击才能对其进行正确过滤。这是不理想的。有没有一种方法可以将代码合并到Worksheet_change中。
此外,第二个选择是否也可以过滤行,以便仅显示具有值的行而隐藏空白的行?第二个过滤器将始终过滤到一列,并且永远不会超过一列。当用户选择另一个下拉菜单时,我将添加什么代码来重置行过滤器?
感谢您的帮助。
Lando:)
答案 0 :(得分:0)
您的原始代码可以重写为
Private Sub Worksheet_Change(ByVal Target As Range)
Dim the_selection As String
Dim the_group As String
Dim Rep As Long
If Target.Address = "$B$2" Then
the_selection = Sheet1.Range("B2") 'If this code is in Sheet1 you can just use "the_selection=Target".
For Rep = 5 To 100
the_group = Sheet1.Cells(3, Rep)
Sheet1.Columns(Rep).Hidden = (the_selection <> the_group)
Next Rep
End If
End Sub
Sheet1.Columns(Rep).Hidden
需要TRUE或FALSE才能隐藏/显示
柱。 (the_selection <> the_group)
将在以下情况下返回TRUE
the_selection
与the_group
不同,如果没有,则为FALSE。 您的组合代码可能是:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim the_selection As String
Dim the_group As String
Dim Rep As Long
If Not Intersect(Target, Range("B2:C2")) Is Nothing Then
the_selection = Target
'Unhide all columns if B2 is changed.
If Target.Address = "$B$2" Then
Sheet1.Columns.Hidden = False
End If
For Rep = 5 To 100
the_group = Sheet1.Cells(Target.Column + 1, Rep)
Select Case Target.Address
Case "$B$2"
Sheet1.Columns(Rep).Hidden = (the_selection <> the_group)
Case "$C$2"
If Not Sheet1.Columns(Rep).Hidden Then
Sheet1.Columns(Rep).Hidden = (the_selection <> the_group)
End If
End Select
Next Rep
End If
End Sub
the_selection=Target
)中获取值。 the_group = Sheet1.Cells(Target.Column + 1, Rep)
)。 If Not Sheet1.Columns(Rep).Hidden Then
)