Excel 2010 VBA 入门 131 移动不同列表框中的项目
目录
题
码
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 移动不同列表框中的项目相关推荐
- Excel 2010 VBA 入门 051 获取和设置计算机中的当前日期
示例 Option ExplicitSub 获取设置日期()Dim dDate1 As DateDim dDate2 As Date'获取日期dDate1 = DateDebug.Print &quo ...
- Excel 2010 VBA 入门 034 创建图片批注
目录 批注(Comment)对象 批注的添加与删除 FiIIFormat对象 OnError语句 示例: 批注(Comment)对象 Comment对象是单元格的一个属性,表示单元格的批注.Comme ...
- Excel 2010 VBA 入门 125 创建动态智能匹配的下拉列表
目录 题 码 TextBox控件和ListBox控件 ListBox控件的ListFiIIRange属性和List属性 ListBox控件的多列显示 ListBox控件的值 模糊查询下拉列表 控件的选 ...
- Excel 2010 VBA 入门 098 导入Access数据库的数据
示例 Access是微软Office组件的数据库软件,使用它可以进行简单的数据库软件的开发.但Access的图表功能和数据分析功能不如Excel强大,常用的做法可以将Access中的数据导入 Exce ...
- Excel 2010 VBA 入门 007 创建和使用数字证书签名
目录 操作方法 1.创建数字证书 步骤1 单击Windows中的"开始"按钮,在"所有程序"中找到Microsoft Office,在子文件夹"Mi ...
- Excel 2010 VBA 入门 119 创建对话框的帮助文档
目录 例 码 步骤1 步骤2 步骤3 步骤4 步骤5 步骤6 步骤7 步骤8 步骤9 步骤10 步骤11 步骤12 步骤13 步骤14 步骤15 CHM文件及HTML Help Workshop ...
- Excel 2010 VBA 入门 001显示开发工具选项卡
目录 VBA简介 宏简介 显示"开发工具"选项卡 VBA简介 Visual Basic for Application (VBA)是Visual Basic的一种宏语言,是依附 ...
- Excel 2010 VBA 入门 129 利用窗体向工作表中录入数据
目录 题 码 窗体控件与工作表的交互 窗体的事件 窗体中ControIs集合访问控件 控件的排列 使用控件数组进行赋值 题 如图所示,该表为某公司订单记录表,其中所有的列都是必填的,订单编号为自动生成 ...
- Excel 2010 VBA 入门 033 批量合并相同的单元格
目录 Range的Merge方法合并单元格 VBA运行时关闭警告 多行中相同的内容处理 示例: Range的Merge方法合并单元格 单元格对象的Merge方法可以用来合并相邻的单元格区域,使之成为一 ...
最新文章
- Java 8系列(一): 日期/时间- JSR310( Date and Time API)
- python or妙用
- Codeforces-gym-101020 problem C. Rectangles
- Android布局怎么画图形,Android开发者的图形化布局
- 10个必知的网页设计术语计算机与网络,入学测试计算机与网络应用基础知识题库(公开题)教学文稿(10页)-原创力文档...
- WPF MVVM模式 发送DataGird表格的数据到另一个页面显示
- HTML表格外边框双线,HTML table 边框双线变单线
- 仿QQ项目(一):好友列表
- 基于高德api的地区全类poi爬取
- 猿创征文|三维重建领域的开发者工具箱
- 最新推出SAP ECC EHP7最新版本IDES带演示数据,带开发ACCESS KEY。
- springboot全局异常处理BasicErrorController和RestControllerAdvice
- internal_error:xst:cmain.c:3423:1.29
- java 微信支付以及退款拿过来直接使用
- leetcode122-买卖股票的最佳时机 II
- 有什么好的电影网站,好的在线电影网站
- EYOU 文章列表如何调用文章主体
- python 收银系统_python 编程练习——根据一张单据设计点单收银系统
- FMC子卡:4 通道 250MSPS采样率16 位 AD 采集子卡
- outlook服务器备份文件,Outlook2016邮件备份方法