Excel VBA高级编程 - 根据关键词实时筛选,自动生成下拉菜单

关注公众号:万能的Excel     并回复【实时筛选】获取源文件!

功能说明:

当客户群体到达一定数量后,统计信息往往编程一项非常繁琐的工作。根据关键字自动搜索并且列出完整的信息编程一项必不可少的功能

本工作表实现的功能:

1、Excel 根据关键字进行模糊查找

2、不限数据库大小

3、生成下拉菜单

附上代码:

Private Sub ListBox1_Click() 
    arr = Sheet7.Range("A1").CurrentRegion                                             
    t = UBound(arr)                                                                            
    On Error Resume Next
    k = Application.WorksheetFunction.Match(Me.ListBox1.Value, Sheet7.Range("A1:A" & t), 0)    
    ActiveCell.Value = Me.ListBox1.Value 
    ActiveCell.Offset(0, 1).Value = Application.WorksheetFunction.Index(Sheet7.Range("c:c"), k) 
    Me.TextBox1.Visible = False                                                                
    
End Sub

Private Sub TextBox1_Change() '检测TextBox 中是否有输入
    Dim arr, i%, j%, d
    Set d = CreateObject("scripting.dictionary")                                                '创建字典用于保存搜索到的结果
    arr = Sheet7.Range("A1").CurrentRegion                                                      '获取页面内容
    For i = 2 To UBound(arr)
        If InStr(arr(i, 1), Me.TextBox1.Value) Then                                             '遍历数据源,搜索符合条件的用户名
            d(arr(i, 1)) = ""                                                                   '保存符合条件的数据

        End If
    Next
    Me.ListBox1.Clear                                                                            
    If d.Count >= 1 Then Me.ListBox1.List = d.keys                                               '输出搜索结果
    
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Me.TextBox1.Visible = False: Me.ListBox1.Visible = False: Exit Sub  
    If Target.Column <> 5 Then Me.TextBox1.Visible = False: Me.ListBox1.Visible = False: Exit Sub

     If Target.Row < 2 Then Me.TextBox1.Visible = False: Me.ListBox1.Visible = False: Exit Sub   
    Dim arr, i%, j%, d
    Set d = CreateObject("scripting.dictionary")                                                  '获取页面内容
    arr = Sheet7.Range("A1").CurrentRegion                                                        '创建字典用于保存搜索到的结果
    For i = 2 To UBound(arr)
        d(arr(i, 1)) = ""                                                                         '保存符合条件的数据
    Next
    With Me.TextBox1               '显示TextBox
        .Top = Target.Top
        .Left = Target.Left
        .Width = Target.Width
        .Height = Target.Height
        .Activate
        .Value = ""
        .Visible = True
    End With
    With Me.ListBox1               '显示ListBox
        .Clear
        .Top = Target.Offset(1, 1).Top
        .Left = Target.Offset(0, 1).Left
        .Height = Target.Offset(0, 1).Height * 8
        .Width = Target.Offset(0, 1).Width * 4
        
        .List = d.keys
        .Visible = True
    End With
End Sub

 

  • 1
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Excel VBA(Visual Basic for Applications)是一种用于在Excel中编写宏和自定义功能的编程语言。通过使用VBA,您可以自动化执行各种任务,包括生成通报。 要自动生成通报,您可以按照以下步骤进行操作: 1. 打开Excel并创建一个新的工作簿。 2. 按下Alt + F11打开VBA编辑器。 3. 在VBA编辑器中,插入一个新的模块。 4. 在模块中编写VBA代码来生成通报。这可能包括从其他工作表或数据源中提取数据,进行计算和分析,并将结果填充到通报模板中。 5. 在VBA代码中使用Excel对象模型来操作工作表、单元格和其他Excel元素。 6. 编写适当的逻辑和条件语句来处理数据和生成通报的不同部分。 7. 运行VBA代码以生成通报。 以下是一个简单的示例代码,用于生成一个包含日期、姓名和内容的通报: ```vba Sub GenerateReport() Dim ws As Worksheet Dim reportSheet As Worksheet Dim lastRow As Long '设置工作表 Set ws = ThisWorkbook.Sheets("数据源") Set reportSheet = ThisWorkbook.Sheets("通报") '找到最后一行 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row '循环遍历数据源并生成通报 For i = 2 To lastRow '获取数据 Dim dateValue As Date Dim nameValue As String Dim contentValue As String dateValue = ws.Cells(i, 1).Value nameValue = ws.Cells(i, 2).Value contentValue = ws.Cells(i, 3).Value '将数据填充到通报模板中 reportSheet.Cells(i, 1).Value = dateValue reportSheet.Cells(i, 2).Value = nameValue reportSheet.Cells(i, 3).Value = contentValue Next i '清除多余的行 reportSheet.Rows(i & ":" & reportSheet.Rows.Count).ClearContents '显示完成消息 MsgBox "通报已生成!" End Sub ``` 您可以根据自己的需求修改和扩展此示例代码,以满足您的具体要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值