Excel从列表中搜索并选择-非下拉列表
我在网上看了很多例子。我找到的所有东西都在组合框下拉列表中。我的老板想输入excel,例如在A1123456中,然后它必须自动过滤列表中的数据,所有列表都以123456开头。然后,他选择他想要的选项,然后转到单元格A2Excel从列表中搜索并选择-非下拉列表,excel,vba,Excel,Vba,我在网上看了很多例子。我找到的所有东西都在组合框下拉列表中。我的老板想输入excel,例如在A1123456中,然后它必须自动过滤列表中的数据,所有列表都以123456开头。然后,他选择他想要的选项,然后转到单元格A2 我试过的所有例子都是一个组合框,这不是他需要的。有人能给我指一下正确的方向吗?我将非常感谢您的帮助。在回答问题的基础上,我想出了一些可行的办法。我最近也有类似的要求;我认为这是一个很好的感觉,而不是通常的用户界面过滤器 我的设置如下所示: Private Sub Workshee
我试过的所有例子都是一个组合框,这不是他需要的。有人能给我指一下正确的方向吗?我将非常感谢您的帮助。在回答问题的基础上,我想出了一些可行的办法。我最近也有类似的要求;我认为这是一个很好的感觉,而不是通常的用户界面过滤器 我的设置如下所示:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim filterField
filterField = 0
If Target.Address = "$B$2" Then
filterField = 1
ElseIf Target.Address = "$C$2" Then
filterField = 2
ElseIf Target.Address = "$D$2" Then
filterField = 3
ElseIf Target.Address = "$E$2" Then
filterField = 4
End If
If filterField <> 0 Then
Call UpdateFilter(filterField, Target.Value)
End If
End Sub
正如@PeterT所提到的,您需要对特定的工作表使用工作表\u更改事件,如下所示:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim filterField
filterField = 0
If Target.Address = "$B$2" Then
filterField = 1
ElseIf Target.Address = "$C$2" Then
filterField = 2
ElseIf Target.Address = "$D$2" Then
filterField = 3
ElseIf Target.Address = "$E$2" Then
filterField = 4
End If
If filterField <> 0 Then
Call UpdateFilter(filterField, Target.Value)
End If
End Sub
Private子工作表\u更改(ByVal目标作为范围)
暗滤场
filterField=0
如果Target.Address=“$B$2”,则
filterField=1
ElseIf Target.Address=“$C$2”则
过滤器字段=2
ElseIf Target.Address=“$D$2”则
过滤器字段=3
ElseIf Target.Address=“$E$2”则
过滤器字段=4
如果结束
如果过滤器字段为0,则
调用UpdateFilter(filterField,Target.Value)
如果结束
端接头
代码中有很多清理和简化的地方,这个版本对于这个特定的例子来说既快又脏——应该不难概括,但是如果你需要帮助,请留下评论
您需要更多的VBA来更新过滤器:
Public Sub UpdateFilter(filterField, strValue)
If strValue = "" Then
Range("B4").AutoFilter field:=filterField, Criteria1:="<>"
Else
strValue = strValue & "*"
Range("B4").AutoFilter field:=filterField, Criteria1:=strValue
End If
End Sub
公共子更新过滤器(过滤器字段,标准值)
如果strValue=“”,则
范围(“B4”)。自动筛选字段:=筛选字段,标准1:“”
其他的
strValue=strValue&“*”
范围(“B4”)。自动筛选字段:=筛选字段,标准1:=标准值
如果结束
端接头
最终结果如下所示:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim filterField
filterField = 0
If Target.Address = "$B$2" Then
filterField = 1
ElseIf Target.Address = "$C$2" Then
filterField = 2
ElseIf Target.Address = "$D$2" Then
filterField = 3
ElseIf Target.Address = "$E$2" Then
filterField = 4
End If
If filterField <> 0 Then
Call UpdateFilter(filterField, Target.Value)
End If
End Sub
在字符串末尾添加“*”允许部分匹配(“以…”开头):
基于对的答案,我想出了一些应该有效的方法。我最近也有类似的要求;我认为这是一个很好的感觉,而不是通常的用户界面过滤器 我的设置如下所示:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim filterField
filterField = 0
If Target.Address = "$B$2" Then
filterField = 1
ElseIf Target.Address = "$C$2" Then
filterField = 2
ElseIf Target.Address = "$D$2" Then
filterField = 3
ElseIf Target.Address = "$E$2" Then
filterField = 4
End If
If filterField <> 0 Then
Call UpdateFilter(filterField, Target.Value)
End If
End Sub
正如@PeterT所提到的,您需要对特定的工作表使用工作表\u更改事件,如下所示:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim filterField
filterField = 0
If Target.Address = "$B$2" Then
filterField = 1
ElseIf Target.Address = "$C$2" Then
filterField = 2
ElseIf Target.Address = "$D$2" Then
filterField = 3
ElseIf Target.Address = "$E$2" Then
filterField = 4
End If
If filterField <> 0 Then
Call UpdateFilter(filterField, Target.Value)
End If
End Sub
Private子工作表\u更改(ByVal目标作为范围)
暗滤场
filterField=0
如果Target.Address=“$B$2”,则
filterField=1
ElseIf Target.Address=“$C$2”则
过滤器字段=2
ElseIf Target.Address=“$D$2”则
过滤器字段=3
ElseIf Target.Address=“$E$2”则
过滤器字段=4
如果结束
如果过滤器字段为0,则
调用UpdateFilter(filterField,Target.Value)
如果结束
端接头
代码中有很多清理和简化的地方,这个版本对于这个特定的例子来说既快又脏——应该不难概括,但是如果你需要帮助,请留下评论
您需要更多的VBA来更新过滤器:
Public Sub UpdateFilter(filterField, strValue)
If strValue = "" Then
Range("B4").AutoFilter field:=filterField, Criteria1:="<>"
Else
strValue = strValue & "*"
Range("B4").AutoFilter field:=filterField, Criteria1:=strValue
End If
End Sub
公共子更新过滤器(过滤器字段,标准值)
如果strValue=“”,则
范围(“B4”)。自动筛选字段:=筛选字段,标准1:“”
其他的
strValue=strValue&“*”
范围(“B4”)。自动筛选字段:=筛选字段,标准1:=标准值
如果结束
端接头
最终结果如下所示:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim filterField
filterField = 0
If Target.Address = "$B$2" Then
filterField = 1
ElseIf Target.Address = "$C$2" Then
filterField = 2
ElseIf Target.Address = "$D$2" Then
filterField = 3
ElseIf Target.Address = "$E$2" Then
filterField = 4
End If
If filterField <> 0 Then
Call UpdateFilter(filterField, Target.Value)
End If
End Sub
在字符串末尾添加“*”允许部分匹配(“以…”开头):
用户在A1中键入值时,您没有说明要过滤的列表或范围。但是,请注意编写代码以捕获该工作表的
工作表\u Change
事件。你可以专注于A1中用户的输入,然后继续对你需要的任何列表或范围应用过滤器;这是一个巧妙的解决办法。我之前已经仔细研究过了,这正是您的用例;我找不到任何不使用VBA的内容。当用户在A1中键入值时,您没有说明要筛选的列表或范围。但是,请注意编写代码以捕获该工作表的工作表\u Change
事件。你可以专注于A1中用户的输入,然后继续对你需要的任何列表或范围应用过滤器;这是一个巧妙的解决办法。我之前已经仔细研究过了,这正是您的用例;我找不到任何不使用VBA的东西。