精华内容
下载资源
问答
  • 他山之石——VBA列表框和组合框

    千次阅读 2018-07-02 18:30:41
    继续学习VBA!不过,这部分都属于“控件”级编程,比较琐碎,偏“前端”一点,在目前的工作中用的不多。毕竟,在数据分析、自动化领域中,界面不是必须的,而数据处理逻辑及数据质量(准确性、完整性)则是重中之重...

    继续学习VBA!不过,这部分都属于“控件”级编程,比较琐碎,偏“前端”一点,在目前的工作中用的不多。

    毕竟,在数据分析、自动化领域中,界面不是必须的,而数据处理逻辑及数据质量(准确性、完整性)则是重中之重。界面可以说是更高层次的要求了,在时间、成本的约束下,界面这个“范围”自然要受到挤压了。


    展开全文
  • VBA_为列表框添加列表项的方法.rar
  • Vba列表框模糊查找后双击里面某一行显示在文本框,求好人帮忙

    Vba列表框模糊查找后双击里面某一行显示在文本框,求好人帮忙

    展开全文
  • 如下图所示,当我们在百度搜索中搜索关键字时,百度搜索会自动列出含有关键字的搜索历史供下拉选择。类似地,在excel中,也经常遇到类似的需求。希望在excel单元格中输入关键字后列出所有含有该关键字的相关列表...

    如下图所示,

    当我们在百度搜索框中搜索关键字时,百度搜索框会自动列出含有关键字的搜索历史供下拉选择。

    类似地,在excel中,也经常遇到类似的需求。希望在excel单元格中输入关键字后列出所有含有该关键字的相关列表供快速选择。

    要实现上述功能,需要解决以下几个问题:所有的列表项需要集合在数组或者单元格区域中;

    在要实现的单元格区域中触发Worksheet_SelectionChange事件;

    在Worksheet_SelectionChange事件下可以弹出文本框控件用于输入关键字,每输入一个关键字,可以自动筛选列表项数组在列表框控件中列出筛选的结果数组;

    在列表框控件中选择了要输入的列表项后,文本框控件和列表框控件能够隐藏。

    其中文本框控件和列表框控件也可以用组合框控件代替。

    接下来介绍代码的实现过程。

    为了实现上述功能,可以先手动在要实现的工作表中插入一个文本框(默认的名称为TextBox1)和列表框(默认的名称为ListBox1)ActiveX控件,然后在该工作表代码窗口中输入如下的代码:

    '定义一个公共的数组变量,用于存放所有列表框项目Public arrPrivate Sub Worksheet_SelectionChange(ByVal Target As Range) Dim oSP As Shape '所有列表项数组 arr = Array('张飞', '关羽', '刘备', '赵云', '诸葛亮', '水星', '张苞', '关平', '孙权', '孙坚', '孙策') '只选中一个单元格时触发 If Target.CountLarge = 1 Then '定义触发的单元格行列条件 If Target.Column = 1 And Target.Row > 1 Then '满足条件先显示文本框,隐藏列表框 With Me Set oSP = .Shapes('TextBox1') With oSP .Visible = msoCTrue .Left = Target.Offset(0, 1).Left .Top = Target.Top .Height = Target.Height * 1.5 .Width = Target.Width End With Set oSP = .Shapes('ListBox1') oSP.Visible = msoFalse End With Else '不满足条件就不显示文本框和列表框 With Me Set oSP = .Shapes('TextBox1') oSP.Visible = msoFalse Set oSP = .Shapes('ListBox1') oSP.Visible = msoFalse End With End If Else '不满足条件就不显示文本框和列表框 With Me Set oSP = .Shapes('TextBox1') oSP.Visible = msoFalse Set oSP = .Shapes('ListBox1') oSP.Visible = msoFalse End With End IfEnd SubPrivate Sub TextBox1_Change() '读取筛选后的列表框项目数组 Dim sText As String sText = TextBox1.Text arrList = VBA.Filter(arr, sText) With ListBox1 .Clear .List = arrList End With '显示列表框 With Me Set oSP = .Shapes('ListBox1') With oSP .Visible = msoCTrue .Left = TextBox1.Left .Top = TextBox1.Top + TextBox1.Height .Height = TextBox1.Height * 5 .Width = TextBox1.Width End With End WithEnd SubPrivate Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) '双击列表框中的列表项将内容填入当前活动单元格中,同时隐藏列表框 Dim oRng As Range Set oRng = Excel.ActiveCell oRng.Value = ListBox1.Value ListBox1.Visible = False '清空文本框内容 TextBox1.Text = ''End Sub

    运行代码后的效果如下图所示,输入“张”字,会自动列出含有“张”字的所有列表项。

    展开全文
  • 目录 题 ...提取其中的部分列组成新表,并能够通过列表框从已有列中选择所需的列。 员工编号 姓名 部门 应发合计 基本工资 加班工资 补贴 奖金 病事假扣款 养老保..

    目录

    ListBox的AddItem方法和RemoveItem方法

    ListBox控件的MuItiSeIect属性

    ListBox控件的Value属性

    ListBox控件的ListIndex属性

    VBA实现ListBox项目的移动


        如图所示,该表为某公司员工的工资表。提取其中的部分列组成新表,并能够通过列表框从已有列中选择所需的列。

    员工编号姓名部门应发合计基本工资加班工资补贴奖金病事假扣款养老保险医疗保险失业保险公积金税前小计个人所得税工资实发
    0114俞卫广总经办670067000000536134674695494399.15094.9
    0374高波总经办6250620005000496124624345134345.14788.9
    0209曲波人事部321532150000257.264.332.2225.12636.238.62597.6
    0352周书敬人事部42004200000033684422943444119.43324.6
    0370姚胜财务部58005300050000424106533714846301.94544.1
    0265毛传阳财务部35003500000028070352452870622808
    0016袁志刚财务部352335230000281.870.535.2246.62888.963.92825
    0042齐光市场部5485542506000434108.554.3379.84508.4251.24257.2
    0028刘晨市场部531853180000425.4106.453.2372.34360.7229.154131.55
    0066曾国安市场部472647260000378.194.547.3330.83875.3162.53712.8
    0233李卫卿市场部621362130000497124.362.1434.95094.7339.254755.45
    0288张元端市场部246524650000197.249.324.7172.62021.21.052020.15
    0314张宏销售部10760231000845001844623161103461294.29051.8

    步骤1  按组合键【Alt+F11】打开VBE。
    步骤2  选择菜单“插入”→“ 用户窗体”,并在窗体中添加两个ListBox控件和5个CommandButton控件,将其中的5个CommandButton控件分别命名为“btAdd”、“btRemove”、“btUp”、“btDown”和“btGenerate”,然后将其Caption属性分别设置为“>>”、“<<”、“↑”、“↓”和“生成”,调整窗体大小和控件位置,最后添加两个Label控件用以标注ListBox,如图所示。

    步骤3  在“工程资源管理器”中右键单击之前插入的窗体,选择“查看代码”,并输入以下代码。

    Option Explicit
    
    Private Sub btAdd_Click()
        MoveItem Me.ListBox1, Me.ListBox2
    End Sub
    
    
    Private Sub btRemove_Click()
        MoveItem Me.ListBox2, Me.ListBox1
    End Sub
    
    Private Sub btUp_Click()
        ChangeOrder Me.ListBox2, -1
    End Sub
    
    Private Sub btDown_Click()
        ChangeOrder Me.ListBox2, 1
    End Sub
    
    Private Sub btGenerate_Click()
        Dim sItem As Variant
        Dim shtData As Worksheet
        Dim shtNew As Worksheet
        Dim i As Long
        Dim Rng As Range
        
        If Me.ListBox2.ListCount = 0 Then
            Exit Sub
        End If
        
        Set shtData = Sheet1
        Set shtNew = Worksheets.Add(after:=shtData)
        
        For i = 0 To Me.ListBox2.ListCount - 1
            sItem = Me.ListBox2.list(i)
            '在数据表的标题中查找项目所在的单元格
            Set Rng = shtData.Rows(1).Find(sItem)
            '将项目所在的列复制到新建表中
            Rng.EntireColumn.Copy shtNew.Cells(1, i + 1)
        Next i
        
        shtNew.Activate
    End Sub
    
    
    Private Sub UserForm_Initialize()
        Dim shtData As Worksheet
        Dim colData As Long
        
        Set shtData = Sheet1
        With shtData
            For colData = 1 To .Range("A1").CurrentRegion.Columns.Count
                Me.ListBox1.AddItem CStr(.Cells(1, colData)), colData - 1
            Next colData
        End With
    End Sub
    
    '在不同的ListBox间移动项目
    Sub MoveItem(listSource As Object, listDestionation As Object)
        Dim sItem As String
        Dim i As Long
        
        If Not IsNull(listSource.Value) Then
            i = listSource.ListIndex
            sItem = listSource.list(i)
            listSource.RemoveItem i
            listDestionation.AddItem sItem
        End If
    End Sub
    
    '更改项目顺序
    Sub ChangeOrder(list As Object, direction As Integer)
        Dim sItem As String     '项目值
        Dim i As Long           '项目当前序号
        Dim newI As Long        '新的项目序号
        
        If Not IsNull(list.Value) Then
            i = list.ListIndex
            sItem = list.list(i)
            newI = i + direction
            If newI >= 0 And newI <= list.ListCount - 1 Then
                list.RemoveItem i
                list.AddItem sItem, newI
                list.ListIndex = newI
            End If
        End If
    End Sub
    

    步骤4  返回工作表界面,添加一个ActiveX按钮控件“显示窗体”,并为其添加单击事件代码如下,完成后退出“设计模式”。

    Option Explicit
    
    Private Sub CommandButton1_Click()
        UserForm1.Show False
    End Sub
    

     步骤5  单击“显示窗体”按钮,选中ListBox控件中的项目,并单击上方的各个按钮,可以添加项目和移动项目。当单击“生成”按钮后,即可根据所选择的项目生成工作表。

    ListBox的AddItem方法和RemoveItem方法

            工作表中的ActiveX控件ListBox可以使用ListFillRange和List属性为其直接赋值列表项目。对窗体中的ListBox控件而言,这两个对应的属性分别为RowSource和List。除此之外,可以使用AddItem方法和RemoveItem方法动态添加和删除列表项目。
        AddItem方法用以添加ListBox的列表项,其语法为:

    ListBox.AddItem(pvargItem[,pvargIndex])
    • 参数pvargItem为所要添加的项目,一般为文本类型的数据。
    • 参数pvargIndex为添加项目的顺序号,该顺序号从0开始(即第1个项目为0)。若该参数省略,则默认添加在当前最后一个项目之后。当所添加的位置已经存在项目时,则其原有的项目以及之后的所有项目都按原相对顺序后移。当该参数超过所有项目的总数时,该方法将会出现如图所示的错误。ListBox控件使用pvargIndex来区分每个不同的项目。

    RemoveItem方法可以从ListBox中删除指定的项目,其语法为:

    ListBox.RemoveItem(pvargIndex)

    参数pvargIndex为所要删除项目的顺序号,该顺序号从0开始。
            本例中,当需要将ListBox1中的项目“移动”至ListBox2中时,实质上使用了RemoveItem方法将ListBox1中的项目删除,并使用AddItem方法在ListBox2中添加该项目。
            本例实现在ListBox2中上下移动项目的功能时,实质上也是先删除RemoveItem项目,然后使用AddItem方法添加。在添加项目的过程中,由于需要改变其原有的位置,因而可以将pvarIndex在原有的基础上进行增减来改变其位置。当原有位置已经为最前或者最后时,为避免错误,此时应限制项目不能前移或后移。
            如图所示,需要将“选项2”下移一项,其原有的位置序号假设为index。首先将选项2删除,该位置将会被下一个选项“选项3”占据,当再次插入“选项2”时,则此时的序号为index+1。因而,只需记录需要移动选项的最初序号,在其再次添加时,设定其序号为最初的序号加1,即可实现下移。同理,上移操作则将序号设定为最初的序号减1。

    ListBox控件的MuItiSeIect属性

            ListBox允许进行多选,开发者可以通过MultiSelect属性对其进行设置。该属性可以为:fmMultiSelectSingle(单选)、fmMultiSelectMulti(多选)、fmMultiSelectExtended(多选扩展模式)。
          当该属性为fmMultiSelectMulti时,则使用鼠标左键单击项目可以实现项目的选中或取消选择;当该属性为fmMultiSelectExtended时,则需要按住【Ctrl】键或【Shift】键的同时用鼠标左键单击才可完成多选。

    ListBox控件的Value属性

            ListBox的Value属性返回的是当前选中的项目。当没有选中任何项目时,其Value属性是一个Null值。Null值是无法进行比较和赋值的,必须通过使用IsNull函数判断是否为Null值。因而本例中,首先使用该函数判断Value属性是否为Null值,当为非Null值时,才进行下一步操作,从而避免了错误的发生。

    ListBox控件的ListIndex属性

            当ListBox控件的MultiSelect属性为fmMultiSelectSingle(即控件为单选)时,可以通过ListIndex属性来设置或者读取当前选中的项目的顺序号,其语法为:

    ListBox.ListIndex[=pvargIndex]

    其中,pvargIndex为项目的顺序号(从0开始)。

    VBA实现ListBox项目的移动

            ListBox项目是无法直接移动的,只能通过RemoveItem方法和AddItem方法实现。当需要移动某个项目时,总是在列表中先使用RemoveItem方法删除该项目,然后再使用AddItem方法添加它,在添加时,可以对pvargIndex参数进行设置,从而实现移动的效果。
    本例使用了两个自定义过程用于实现在不同的ListBox之间移动以及在同一个ListBox中的移动。然后在定义按钮单击事件时,通过传递不同的参数实现项目的移动。这两个方法也可以合并成为一个通用的过程。

     

     

    展开全文
  • 在自学应用10我们已经讲过了如何给列表框添加元素,今天我们就来看看如何移动列表框的元素并且数据源的位置也随之变动。 首先我们用listbox的list属性添加元素,这里自学应用10已经提过,不再做赘述 如图是我的窗体...
  • 给组合框或列表框添加元素一、RowSource属性添加元素二、为工作表中的ActiveX控件中的列表框添加元素三、使用list属性添加元素四、使用additem方法添加列表项五、列表框的其他属性 一、RowSource属性添加元素 ...
  • 使用这样的函数返回所选项的数组:Public Function GetSelectedItems(lBox As MSForms.ListBox) As Variant'returns an array of selected items in a ListBoxDim tmpArray() As VariantDim i As IntegerDim ...
  • 一、允许多项选择 代码如下 Private Sub UserForm_Initialize() arr = Sheets("产品表").Range("a1").CurrentRegion ... '设置列表框属性 .List = arr .MultiSelect = fmMultiSelectExtended ...
  • 我有用户表单,有14个文本框,2个命令按钮“next”,“Post”和1个列表框我需要代码将数据从14个文本框传送到列表框,再次当用户输入新数据并按下此数据添加到列表框中的第二行时,再次获取最后当他发布所有数据后移...
  • 完整版超级列表框排序.rar
  • 精简的OFFICE2003安装后,在编辑VBA代码时,发现鼠标轮不能滚动查看了,这个工具就是用来解决问题的。
  • VBA--用类实现组合联动

    千次阅读 2018-07-12 11:36:47
     .ListIndex = 0 '使复合中默认显示第一个数据 End With End Sub Private Sub UserForm_Initialize()  Dim i As Integer, dic As Object  Set dic = CreateObject("scripting.dictionary") '创建一个字典来存储...
  • 微信公众号原文 系统:Windows 7 软件:Excel 2010 / Access 2010 ...涉及功能为:双击列表框显示所选行第1列信息 功能动图 Part 2:代码 Private Sub List0_DblClick(Cancel As Integer) ct...
  • VBA列表框(ComboBox或ListBox)中填加数据向列表框中填加数据的方法很多,下面根据实例介绍3种最常用到的方法:图1图2如图1所示的下拉列表框(组合框),图2为其数据源,图2所有在工作表表名为:设置表无论哪种...
  • Excel VBA实现渐进式模糊搜索

    千次阅读 2020-12-31 09:25:51
    Excel在录入时可以匹配现有的内容,但有时还是满足不了我们的要求,以下是用Excel VBA实现的渐进式模糊搜索作者...先放置 一个TextBox1 文本框 及列表框ListBox1然后在工作表代码中Dim dDim arr, brr(0)Dim arPrivat...
  • Access-控件解析-列表框-02-获取选项

    千次阅读 2018-08-25 19:50:05
    微信公众号原文 系统:Windows 7 ...本篇介绍的控件为:列表框。涉及功能为:后台获取用户的选择项 UI界面存在大量与用户互动的部分,根据客户不同的选择展现不同的信息 功能动图 静图 Part 2:...
  • VBA写一个下拉复选,以及循环判断,附代码 图1: 图2 图2中的复选下拉框框显示图1中的配置。 VBA代码 Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Dim i&, s$ With...
  • VBA实现动态查询下拉列表输入

    千次阅读 2020-07-25 23:43:53
    Excel利用VBA实现下拉列表,同时支持输入时动态查询,根据输入的不同实现动态的查询 先看一下实验效果: 当点击website这一列时会出现所有的网站列表,双击可点击选择数值填入 输入关键字时会只出现包含关键字的...
  • VBA复选下拉框,判断总共行数,循环判断复选内容进行对比操作,生成JSON串。如有疑问,欢迎交流!
  • 我有用户表单,有14个文本框,2个命令按钮“next”,“Post”和1个列表框我需要代码将数据从14个文本框传送到列表框,再次当用户输入新数据并按下此数据添加到列表框中的第二行时,再次获取最后当他发布所有数据后移...
  • 列表项目较多时,数据有效性所创建的下拉列表就很难快速并准确地定位。如图所示,该表为某公司客户一览,现准备建立查询表,希望在查询表的客户列中建立下拉列表,并允许输入关键字后显示匹配该关键字..
  • 列表框设置每行行高

    千次阅读 2013-11-04 14:22:24
    MFC的标准列表框控件并没有给出设置每一行高度的接口。 有两种方法可以设置: 1.取巧的方法:为列表框插入图标,每一行的高度自动变为图标的高度。这个方法很快,但总觉得有点别扭,且不好移植。所以我没用这种...
  • 微信公众号原文 系统:Windows 7 软件:Excel 2010 / Access 2010 这个系列介绍常用的控件 包括在界面端的设置及在代码端的实现 ...列表框支持多选(属性表-其他-多重选择-展开的),本文目标在于...
  • Excel VBA ListBox列表框添加和删除问题

    万次阅读 2008-04-04 23:30:00
    Excel VBA 窗体中有两个ListBox,需要做的操作:从一个列表框中选择列表值向另一个列表添加值,以及从已选择的值中删除选择的列表值。 例:ListBox列表 被选框lbData, 选择框lbSelectedData,列表框中显示三列。-...
  • vba - 循环 添加 复选

    千次阅读 2018-10-22 10:21:04
    Sub addCheckBox()  For i = 1 To 8  ... ActiveSheet.CheckBoxes.Add(Cells(1, i).Left, Cells(1, i).Top, 25, 16.5).Select '在cells(i,1)处添加复选  Selection.Characters.Text = str(i) ...
  • VBA如何禁用滚轮?

    2020-12-21 19:41:27
    单纯的通过Excel VBA 如何在不通过外部文件的情况下禁用滚轮</p>
  • Access VBA动态修改组合数据源

    千次阅读 2018-04-11 15:41:05
    iamlaosong文根据输入的工厂简称动态修改发货客户和收货客户两个组合的数据源:'输入工厂后根据工厂修改收发客户的数据源供录入选择,同时生成LoadTo Private Sub FAbbr_AfterUpdate() Me!LoadTo = Me!Load &...
  • 点击单元格,能自动弹出列表框,内容点击即可填写到单元格中,能自游选取。操作方便。窗体的最大化和最小化。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,543
精华内容 1,417
热门标签
关键字:

vba列表框