首页 > 单独文章 > 正文

教你利用EXCEL2010列表框和VBA代码简化数据输入

时间:2012-02-21 12:56:00 作者:officeba 【认证】

计划在未来3个月写的主题,我们的Office文档团队需要一个简单的方法仅限于列表中的值Excel工作表中输入值。但是,我们不能使用Excel的数据验证功能,因为它不仅让你选择一个项目的每个细胞。

该如何解决?一个多选列表框添加到工作表。但允许多个值,我们还需要使用ActiveX控件列表框中。而且,更重要的是,我们不得不把它挂到一些VBA代码,使其工作。

后来,我反映我建成并认为:很多用户询问列表框,数据验证和宏(或VBA),那么为什么不合并成一个职位的所有三个主题?

第一件事首先在Excel中做任何VBA编程,你需要开发标签色带上可见,这样你就可以在VBA和ActiveX控件命令。为了得到' 开发工具'选项卡“,使Excel选项 “对话框中,单击自定义功能区,并选择开发复选框。

 

Excel选项“对话框

 

现在,开发者是可用的,让我们在放大细看。这里的“ 控件  组中,你会看到一个“插入”按钮。点击它,你会得到这个表格控件菜单。

 

插入ActiveX控件列表框

现在这里是我所做的未来。ActiveX控件,单击“ 列表框 “按钮,在工作表中的任意位置单击,拖动和释放创造我的列表框中。我可以选择它,移动它,无论我想。现在,改变列表框的几个设置。与列表框选择,我右键单击,然后单击“ 属性  菜单上,这带来了“ 属性  列表框的框。

我希望用户能够做出多项选择。默认情况下,该选项是关闭的。它控制的MultiSelect属性,所以我选择设置1,是fmMultiSelectMulti的我想小复选框旁边的列表中的值,所以1,是fmListStyleOption的我设置ListStyle的财产

现在,值得使用列表框,我需要附加价值选择到列表框中。这是一个值列表的单元格区域,它需要在ListFillRange属性。我在此属性框,键入验证〜$ F $ 2:$ F13的 “验证”,这是一个引用到另一个工作表命名范围的细胞

 

ListFillRange属性的列表框控件

 

这几乎是我需要什么上手。现在,编写和测试我的VBA代码。

我挂钩VBA代码的列表框通过右击列表框,然后选择“查看代码”这将启动Visual Basic编辑器(VBE)中,在那里我可以开始编程。

Visual Basic编辑器,准备采取行动!

 

我点击下拉列表,其中包含点击,然后选择KeyPress的这为我创建了一个子程序,称为ListBox1_KeyPress我可以写我的代码行有。

 

ListBox1_Keypress在VBE中的子程序

 

现在我写任何实际的代码之前,我做的事情,我认为我需要做的这一切工作的清单。在Visual Basic编辑器,线之间的“ 私人小组ListBox1_Keypress(0 MSForms.ReturnInteger KeyAscii)  和” 高端子,“我写下我的想法与撇在每一行的开始,变成他们的意见,如这样的:

 

我作为一个大纲写的一些意见

 

这里是主要的子程序(有两个子程序,VBA代码ListBox1_KeyPressClearBoxSelections的)。下面的代码,我将解释什么是一些线路做。



小组ListBox1_KeyPress(0 MSForms.ReturnInteger KeyAscii)如果KeyAscii <> 13然后  ClearBoxSelections   退出小组完如果由于整数点心strWrongCol的点心intActiveCol 字符串暗淡intAppCodeOffset整数作为字符串DIM DIM DIM selRange strActiveColTitle strAppCodeVal 作为范围strWrongCol =“请选择一个单元格在应用栏,并再试一次。“ '获取活动单元格的列;正确的列单元格地址(“应用程序”)?intActiveCol = ActiveCell.Column (规划“)(”A1“)偏移strActiveColTitle =表”的范围。“ (0,intActiveCol - 1)。价值,如果没有strActiveColTitle =“应用程序”,然后  MSGBOX strWrongCol   ClearBoxSelections   ActiveCell.Select   退出子完如果'如果没有正确的列,显示MSGBOX“......选择中的应用列的单元格。” 如果没有strActiveColTitle =“应用程序”,然后  MSGBOX strWrongCol   ClearBoxSelections   ActiveCell.Select   退出小组完如果集selRange = i = 0到ListBox1.ListCount 选择- 1   如果ListBox1.Selected(I)= true,那么,    如果strApps =“      strApps = ListBox1中。名单(一)      intAppCodeOffset =我      。strAppCodeVal =工作表(“验证”)的范围(“G2”的)(0),偏移值。    品      strApps = strApps&“#”&ListBox1.List(一)      intAppCodeOffset = I       偏移(I,0)= strAppCodeVal strAppCodeVal&“#”。工作表(“验证”)范围(“G2”的) ​​价值。    完如果  如果最终下一步如果strApps =“”然后  MSGBOX“至少选择一个应用程序。 “   ActiveCell.Select   出口分结束如果selRange集=(0,-1)随着selRange   selRange.Value selRange.Offset = strAppCodeVal 结束集selRange = selRange.Offset(0,1)从列表框中选择“清除所有框ClearBoxSelections ActiveCell.Select 完小组












































































“KeyAscii <> 13”是一个测试,看看如果用户按下回车键(Enter键发送“13”的计算机)。如果没有,代码清除所选的复选框,并退出。 

 

这以下的部分测试,看看如果用户选择相应的列(列第1行中的“应用程序”)的细胞。我的使用范围与物业偏移方法得到当前列的第一行,这样,单元格的值:


表(“规划”)。范围(“A1”)。偏移(0,-1 intActiveCol价值)。

下面是一个代码仔细看看该节:



偏移量(0,intActiveCol - 1)intActiveCol,= ActiveCell.Column 。strActiveColTitle =表(“规划”)的范围(“A1”)。价值如果没有strActiveColTitle =“应用程序”然后  MSGBOX strWrongCol   ClearBoxSelections   ActiveCell.Select   的Exit Sub end如果







如果当前选定的单元格是在错误的列(即,不是“应用程序”栏中),从Excel中出现的消息(“请选择一个细胞中的应用列,并再试一次。”),所有选中的复选框在列表框被清除,用户需要重新开始。下面是该代码:

 


如果不strActiveColTitle =“应用程序”,然后
  MSGBOX strWrongCol 
  ClearBoxSelections 
  ActiveCell.Select 
  退出小组
结束如果

代码使用一个消息框,显示“请选择中的应用列的单元格,然后再试一次。” 文字,我定义作为变量strWrongCol。然后,我的第二个子程序名为的ClearBoxSelections运行,清除所有选中的复选框,再选择活跃的细胞,并最终退出的主要子程序。换句话说,代码帮助的事情“无法正常。”

如果选定的单元格在正确的列,这是一个GO -通过列表框和行为在每个选定的值(即每个选定的复选框)的代码运行。(复选框)为每个选定的项目列表中,代码发送Excel来存储值的范围,“验证”工作,发现比赛中,在列表框中选定的值的范围。值存储在按字母顺序排列的范围,因此,“Access 2010中”是第一项(0,不是1)。循环的开始是“0”,这样的代码停止在第一个值的单元格区域,“进入2010年,”和值赋给变量strApps。

然后,代码偏移量(移动)一个细胞在其右边的列(我们仍处于“验证”工作),并从该列的值,这是1574。分配给该变量的值strAppCodeVal然后,该代码看起来为未来选择在列表框的值,如果它找到一个,它增加了字符串“#”作为分隔符,然后将在未来的价值发现相匹配的下一个选中的复选框。在这种情况下,它发现在细胞范围的“Excel 2010”和写,strApps变量的值的代码,然后再抵消行动,发现1576的数字代码,并写入,的strAppCodeVal变量,当然,写的分隔符“#”第一。这一切,直到Excel的重复,没有发现多个选定的复选框。由于我的例子中,入围的三个复选框(Access 2010中的Excel 2010和Word 2010),将有三个应用价值和每个变量的三个应用程序代码:

 

strApps =访问2010#的Excel 2010;#Word 2010中

strAppCodeVal = 1574#1576#1691;

 

如果没有在列表框中选定的值,子程序,显示消息“选择至少一个应用程序”,并退出后重新选择活动单元格。

 

 

 


设置
为i = 0到ListBox1.ListCount selRange =选择- 1,
  如果ListBox1.Selected(I)= true,那么
    如果strApps =“ 
      strApps = ListBox1.List(一)
      intAppCodeOffset =我
      strAppCodeVal =工作表(“验证”)。偏移范围(“G2”的)(0)的价值。
    品
      strApps = strApps&“#”&ListBox1.List(一)
      intAppCodeOffset = I 
      = strAppCodeVal strAppCodeVal&“#”&工作表(“验证”)。范围(“G2”的)。偏移(I,0)。值
    完如果如果strApps =“”然后  MSGBOX“至少选择一个应用程序。”   ActiveCell.Select   退出小组完如果
  如果






 

 

 

 

现在,我们准备将值写入到活动单元格(在选定的范围内顶格-假设你选定的单元格G10:G20峰会- “活跃细胞”十国集团,其左侧的单元格同一行-和其他任何选定的单元格(选定的单元格“selRange”在下面的代码表示)我使用的价值的方法写的活动单元格strApps变量的再次使用偏移的方法,以向左移动一列,然后用价值的方法,细胞strAppCodeVal的价值。代码,然后重新选择,用户最初选择(“设置selRange = selRange.Offset(0,1)线)的范围。


与selRange 
  selRange.Value = strApps 
结束集selRange = selRange.Offset(0 -1)随着selRange   selRange.Value的= strAppCodeVal 结尾集selRange的= selRange.Offset(0,1)







 

第二子程序,命名ClearBoxSelections然后运行。它清除从列表框中选择。

 

小组ClearBoxSelections()i = 0到ListBox1.ListCount,-1   ListBox1.Selected(I)= FALSE 下一页()END SUB





此行选择活跃的原始细胞。

ActiveCell.Select

这里是什么应用程序ID和我们工作中的应用细胞看起来选定值后,已写信给他们。你也许会奇怪,为什么没有被选中的Word 2010框?这是因为被清除列表选择权后的值被写入细胞。

 

嗯,我希望你发现这很有用 - 确保工作的人,我做!

 

 

 列表中选择填充细胞


相关文章

同类最新