目录

ListBox的AddItem方法和RemoveItem方法

ListBox控件的MuItiSeIect属性

ListBox控件的Value属性

ListBox控件的ListIndex属性

VBA实现ListBox项目的移动


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

员工编号 姓名 部门 应发合计 基本工资 加班工资 补贴 奖金 病事假扣款 养老保险 医疗保险 失业保险 公积金 税前小计 个人所得税 工资实发
0114 俞卫广 总经办 6700 6700 0 0 0 0 536 134 67 469 5494 399.1 5094.9
0374 高波 总经办 6250 6200 0 50 0 0 496 124 62 434 5134 345.1 4788.9
0209 曲波 人事部 3215 3215 0 0 0 0 257.2 64.3 32.2 225.1 2636.2 38.6 2597.6
0352 周书敬 人事部 4200 4200 0 0 0 0 336 84 42 294 3444 119.4 3324.6
0370 姚胜 财务部 5800 5300 0 500 0 0 424 106 53 371 4846 301.9 4544.1
0265 毛传阳 财务部 3500 3500 0 0 0 0 280 70 35 245 2870 62 2808
0016 袁志刚 财务部 3523 3523 0 0 0 0 281.8 70.5 35.2 246.6 2888.9 63.9 2825
0042 齐光 市场部 5485 5425 0 60 0 0 434 108.5 54.3 379.8 4508.4 251.2 4257.2
0028 刘晨 市场部 5318 5318 0 0 0 0 425.4 106.4 53.2 372.3 4360.7 229.15 4131.55
0066 曾国安 市场部 4726 4726 0 0 0 0 378.1 94.5 47.3 330.8 3875.3 162.5 3712.8
0233 李卫卿 市场部 6213 6213 0 0 0 0 497 124.3 62.1 434.9 5094.7 339.25 4755.45
0288 张元端 市场部 2465 2465 0 0 0 0 197.2 49.3 24.7 172.6 2021.2 1.05 2020.15
0314 张宏 销售部 10760 2310 0 0 8450 0 184 46 23 161 10346 1294.2 9051.8

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

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

Option ExplicitPrivate Sub btAdd_Click()MoveItem Me.ListBox1, Me.ListBox2
End SubPrivate Sub btRemove_Click()MoveItem Me.ListBox2, Me.ListBox1
End SubPrivate Sub btUp_Click()ChangeOrder Me.ListBox2, -1
End SubPrivate Sub btDown_Click()ChangeOrder Me.ListBox2, 1
End SubPrivate Sub btGenerate_Click()Dim sItem As VariantDim shtData As WorksheetDim shtNew As WorksheetDim i As LongDim Rng As RangeIf Me.ListBox2.ListCount = 0 ThenExit SubEnd IfSet shtData = Sheet1Set shtNew = Worksheets.Add(after:=shtData)For i = 0 To Me.ListBox2.ListCount - 1sItem = Me.ListBox2.list(i)'在数据表的标题中查找项目所在的单元格Set Rng = shtData.Rows(1).Find(sItem)'将项目所在的列复制到新建表中Rng.EntireColumn.Copy shtNew.Cells(1, i + 1)Next ishtNew.Activate
End SubPrivate Sub UserForm_Initialize()Dim shtData As WorksheetDim colData As LongSet shtData = Sheet1With shtDataFor colData = 1 To .Range("A1").CurrentRegion.Columns.CountMe.ListBox1.AddItem CStr(.Cells(1, colData)), colData - 1Next colDataEnd With
End Sub'在不同的ListBox间移动项目
Sub MoveItem(listSource As Object, listDestionation As Object)Dim sItem As StringDim i As LongIf Not IsNull(listSource.Value) Theni = listSource.ListIndexsItem = listSource.list(i)listSource.RemoveItem ilistDestionation.AddItem sItemEnd 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) Theni = list.ListIndexsItem = list.list(i)newI = i + directionIf newI >= 0 And newI <= list.ListCount - 1 Thenlist.RemoveItem ilist.AddItem sItem, newIlist.ListIndex = newIEnd IfEnd If
End Sub

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

Option ExplicitPrivate 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中的移动。然后在定义按钮单击事件时,通过传递不同的参数实现项目的移动。这两个方法也可以合并成为一个通用的过程。

Excel 2010 VBA 入门 131 移动不同列表框中的项目相关推荐

  1. Excel 2010 VBA 入门 051 获取和设置计算机中的当前日期

    示例 Option ExplicitSub 获取设置日期()Dim dDate1 As DateDim dDate2 As Date'获取日期dDate1 = DateDebug.Print &quo ...

  2. Excel 2010 VBA 入门 034 创建图片批注

    目录 批注(Comment)对象 批注的添加与删除 FiIIFormat对象 OnError语句 示例: 批注(Comment)对象 Comment对象是单元格的一个属性,表示单元格的批注.Comme ...

  3. Excel 2010 VBA 入门 125 创建动态智能匹配的下拉列表

    目录 题 码 TextBox控件和ListBox控件 ListBox控件的ListFiIIRange属性和List属性 ListBox控件的多列显示 ListBox控件的值 模糊查询下拉列表 控件的选 ...

  4. Excel 2010 VBA 入门 098 导入Access数据库的数据

    示例 Access是微软Office组件的数据库软件,使用它可以进行简单的数据库软件的开发.但Access的图表功能和数据分析功能不如Excel强大,常用的做法可以将Access中的数据导入 Exce ...

  5. Excel 2010 VBA 入门 007 创建和使用数字证书签名

    目录 操作方法 1.创建数字证书 步骤1  单击Windows中的"开始"按钮,在"所有程序"中找到Microsoft Office,在子文件夹"Mi ...

  6. Excel 2010 VBA 入门 119 创建对话框的帮助文档

    目录 例 码 步骤1 ​ 步骤2 步骤3 步骤4 步骤5 步骤6 步骤7 步骤8 步骤9 步骤10 步骤11 步骤12 步骤13 步骤14 步骤15 CHM文件及HTML Help Workshop ...

  7. Excel 2010 VBA 入门 001显示开发工具选项卡

    目录 VBA简介 宏简介 显示"开发工具"选项卡 ​ VBA简介 Visual Basic for Application (VBA)是Visual Basic的一种宏语言,是依附 ...

  8. Excel 2010 VBA 入门 129 利用窗体向工作表中录入数据

    目录 题 码 窗体控件与工作表的交互 窗体的事件 窗体中ControIs集合访问控件 控件的排列 使用控件数组进行赋值 题 如图所示,该表为某公司订单记录表,其中所有的列都是必填的,订单编号为自动生成 ...

  9. Excel 2010 VBA 入门 033 批量合并相同的单元格

    目录 Range的Merge方法合并单元格 VBA运行时关闭警告 多行中相同的内容处理 示例: Range的Merge方法合并单元格 单元格对象的Merge方法可以用来合并相邻的单元格区域,使之成为一 ...

最新文章

  1. Java 8系列(一): 日期/时间- JSR310( Date and Time API)
  2. python or妙用
  3. Codeforces-gym-101020 problem C. Rectangles
  4. Android布局怎么画图形,Android开发者的图形化布局
  5. 10个必知的网页设计术语计算机与网络,入学测试计算机与网络应用基础知识题库(公开题)教学文稿(10页)-原创力文档...
  6. WPF MVVM模式 发送DataGird表格的数据到另一个页面显示
  7. HTML表格外边框双线,HTML table 边框双线变单线
  8. 仿QQ项目(一):好友列表
  9. 基于高德api的地区全类poi爬取
  10. 猿创征文|三维重建领域的开发者工具箱
  11. 最新推出SAP ECC EHP7最新版本IDES带演示数据,带开发ACCESS KEY。
  12. springboot全局异常处理BasicErrorController和RestControllerAdvice
  13. internal_error:xst:cmain.c:3423:1.29
  14. java 微信支付以及退款拿过来直接使用
  15. leetcode122-买卖股票的最佳时机 II
  16. 有什么好的电影网站,好的在线电影网站
  17. EYOU 文章列表如何调用文章主体
  18. python 收银系统_python 编程练习——根据一张单据设计点单收银系统
  19. FMC子卡:4 通道 250MSPS采样率16 位 AD 采集子卡
  20. outlook服务器备份文件,Outlook2016邮件备份方法

热门文章

  1. 计算机在信息社会中主要的应用,计算机在信息社会中的应用ppt
  2. 《吐血整理》顶级大佬学习方法
  3. js向上向下取整_JS之向上取整、向下取整、四舍五入等
  4. Unity UGUI(九)Dropdown(下拉列表框)
  5. 青岛,一座来了就想“哈”啤酒的城市
  6. 关于最近苹果iPhone降价的个人看法
  7. 一个来自普通大学的普通学生的不普通自述
  8. 联想YOGA Pro 14s Carbon 2022款 锐龙版评测
  9. PS制作童年时候的棒棒糖(转载)
  10. nginx vue2+webpack 和 vue3+vite 配置二级目录访问