Excel VBA合并2个目标地址的工作表\u更改代码

Excel VBA合并2个目标地址的工作表\u更改代码,excel,vba,Excel,Vba,我是VBA新手,想知道如何组合2个工作表更改脚本,或者是否应该使用其他内容 我有一个下拉列表,当被选中时,它将依赖于另一个下拉列表 对于第一个下拉列表,我有过滤列的代码,以便隐藏其他列。第3行中有多个具有相同文本的列,使多个列与第一个下拉列表关联。下面的代码适用于B2 用户可能会在第一个下拉列表中停止,但如果他们选择第二个下拉列表,我需要电子表格进一步过滤列,以便只显示一列。标题标题在第4行 目前我有: Private Sub Worksheet_Change(ByVal Target As R

我是VBA新手,想知道如何组合2个工作表更改脚本,或者是否应该使用其他内容

我有一个下拉列表,当被选中时,它将依赖于另一个下拉列表

对于第一个下拉列表,我有过滤列的代码,以便隐藏其他列。第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下拉列表创建一个工作表\u SelectionChange,它可以正常工作,但我必须先单击单元格外,然后再单击单元格内,以便正确过滤。这并不理想。是否有办法将代码合并到工作表中

另外,第二个选择是否也可能对行进行筛选,因此只有那些值出现且空白的隐藏?第二个过滤器将始终过滤到一列,而不会超过一列。当用户选择其他下拉列表时,我将添加什么代码来重置行过滤器

感谢您的帮助


Lando:)

您的原始代码可以重写为

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  
  • 代码将采用B2或C2中的值(
    The_selection=Target
  • B2查看第3行,C2查看第4行-B列也是第2列,C列也是第3列,因此代码仅添加一个以获得正确的行号(
    the_group=Sheet1.Cells(Target.column+1,Rep)
  • 如果更改的值为C2,则您不希望取消隐藏B2已隐藏的任何列,因此代码会在尝试隐藏该列之前检查该列是否已隐藏(
    如果未隐藏,则为Sheet1.columns(Rep).hidden then

组=Sheet1.范围(列)和“3”)
有一个过多的结束括号。。。。现在只看问题的其余部分。您可以将
组=Sheet1.Range(列)和“3”
更改为
组=Sheet1.Cells(3,Rep)
并删除
组=GetColumnLetter\u ByInteger(Rep)
单元格
使用行号和列号返回对单个单元格的引用)。是的,这是我的一个打字错误-额外的(不是在脚本本身中。更改
B2
查看第3行的匹配标题,更改
C2
查看第4行的标题?谢谢Darren。我添加了代码,它第一次工作正常,但当我在C2中选择其他选项时,所有项目都消失,并且没有任何列可见。
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