Excel 2010 VBA 入门 129 利用窗体向工作表中录入数据
目录
题
码
窗体控件与工作表的交互
窗体的事件
窗体中ControIs集合访问控件
控件的排列
使用控件数组进行赋值
题
如图所示,该表为某公司订单记录表,其中所有的列都是必填的,订单编号为自动生成的序列号。如何建立窗体,并通过窗体向该表内添加订单。
编号 | 客户名称 | 订单日期 | 需求日期 | 型号 | 数量 |
1 | 上海依柯塞尔有限公司 | 2012/1/1 | 2012/1/8 | A1 | 12 |
2 | 上海依柯塞尔有限公司 | 2012/1/2 | 2012/1/9 | A2 | 13 |
3 | 上海依柯塞尔有限公司 | 2012/1/3 | 2012/1/10 | A3 | 14 |
4 | 上海依柯塞尔有限公司 | 2012/1/4 | 2012/1/11 | A4 | 15 |
5 | 上海依柯塞尔有限公司 | 2012/1/5 | 2012/1/12 | A5 | 16 |
6 | 上海依柯塞尔有限公司 | 2012/1/6 | 2012/1/13 | A6 | 17 |
7 | 上海依柯塞尔有限公司 | 2012/1/7 | 2012/1/14 | A7 | 18 |
8 | 上海依柯塞尔有限公司 | 2012/1/7 | 2012/1/14 | A7 | 18 |
码
创建一个窗体,并在窗体中添加与工作表所需填写的数据列数相等的文本框与标签控件,然后添加一个按钮作为“保存”按钮。在“保存”按钮中添加Click事件,逐个读取文本框的Value属性,将其赋值给工作表中的各列。
步骤1 按组合键【Alt+F11】打开VBE。
步骤2 选择菜单“插入”→“用户窗体”,并在窗体中添加5个Label控件和5个TextBox控件,以及1个CommandButton控件。
步骤3 在“工程资源管理器”中右键单击之前插入的窗体,选择“查看代码”,然后在代码编辑框中输入以下代码。
Option Explicit
'窗体初始化事件
Private Sub UserForm_Initialize()Dim ctlIndex As IntegerWith Me.Caption = "数据录入".CommandButton1.Caption = "录入"For ctlIndex = 1 To 5'label控件With .Controls("Label" & ctlIndex).Left = 22.Top = 22 * (ctlIndex - 1) + 12.Height = 18.Width = 50.Caption = Sheet1.Cells(1, ctlIndex + 1).ValueEnd With'textbox控件With .Controls("TextBox" & ctlIndex).Left = 80.Top = 22 * (ctlIndex - 1) + 12.Height = 18.Width = 100End WithNext ctlIndexEnd With
End Sub'按钮事件
Private Sub CommandButton1_Click()Dim rowNew As LongDim ctlIndex As IntegerWith Sheet1'获取添加新数据的行号rowNew = .Columns.Find("*", .Range("A1"), SearchDirection:=xlPrevious).Row + 1'填写序号.Cells(rowNew, 1).Value = rowNew - 1'遍历数据列和TextBox控件For ctlIndex = 1 To 5.Cells(rowNew, ctlIndex + 1).Value = Me.Controls("Textbox" & ctlIndex).TextNext ctlIndexEnd With
End Sub
步骤4 返回工作表界面,添加一个ActiveX按钮控件“显示窗体”,并为其添加单击事件代码如下,然后退出“设计模式”。
Option ExplicitPrivate Sub CommandButton1_Click()UserForm1.Show
End Sub
步骤5 单击“显示窗体”按钮,在窗体的文本框中输入内容后,单击“录入”按钮,即可将窗体中的内容写入工作表中,如图。
窗体控件与工作表的交互
窗体控件与工作表是可以进行交互的。开发者可以通过窗体控件的属性,方便地读取其中所需的值,然后赋值给工作表中的单元格或者任何希望赋值的对象;也可以将其他对象中所需传递的值赋值给工作表中的单元格。
本例中,由于使用可以输入字符的TextBox控件,可以通过其Text属性或者Value属性获取在文本框中的内容。为了便于赋值,一般可以将TextBox控件取名为TextBoxN的形式,其中N表示该文本框相应的数据在工作表中的列。因而,可以通过循环进行批量赋值。
窗体的事件
本例中,窗体的Initialize事件中添加了读取各个数据标题的代码以赋值给Label控件,并对其中的各个控件进行了排列。该Initialize事件在窗体加载时发生,一般可以在其中进行窗体的一些初始化工作,尤其是一些排版或者标签赋值的工作。窗体还有许多非常有用的事件,见表。
事 件 |
说 明 |
Click() |
单击窗体区域(标题除外)事件 |
DblClick(ByVal Cancel As MSForms.ReturnBoolean) |
双击窗体区域(标题除外)事件 |
Activate() |
激活事件。当窗体获取焦点后被触发,类似于工作表的Activate事件 |
Deactivate() |
失去激活状态事件。当窗体失去焦点后被触发,类似于工作表的Deacitvate事件 |
Initialize() |
初始化事件。当窗体装载时触发 |
QueryClose(Cancel As Integer,CloseMode as Integer) |
关闭事件。在窗体关闭前而未真正关闭时触发,可以通过Cancel参数取消关闭 |
Terminate() |
终止事件,当窗体卸载后触发 |
KeyDown(ByVal KeyCode As MSForms.RetunInteger,ByVal Shift As lnteger) |
键盘键接下事件。当健盘键按下后触发 |
KeyUp(ByVal KeyCode As MSForms.ReturnInteger,ByVal Shift As Integer) |
键盘键弹起事件。当键盘键弹起后触发 |
KeyPress(ByVal KeyAscii As MSForms.Returninteger) |
敲击键盘键事件。当敲击键盘键后触发,一个完整的敲击事件包括键盘键按下和键盘键弹起 |
MouseDown(Byval Button As integer, ByVal Shift As integer, ByVal X As Single,ByvaL Y As Singe) |
鼠标按下事件.当鼠标的某个键被按下时触按 |
MouseUp(ByVal Button As integer, ByVal Shift As integer, ByVal X As Single,ByVaL Y As Single) |
鼠标键弹起事件。当鼠标的某个键弹起时触发 |
MouseMove(ByVal Button As integer, ByVal Shift As integer, ByVal X As Single,ByVal Y As Single) |
鼠标移动事件。当鼠标在控件上移动时触发。 |
窗体中ControIs集合访问控件
窗体中的所有控件都属于窗体Controls集合。当需要访问各个控件时,可以使用以下表达式:
UserForm.Controls(index)
该表达式可以返回一个窗体控件对象,其中,UserForm为窗体对象。
参数index可以为控件的顺序号(从0开始),或者可以是控件的名称。
默认情况下,窗体中控件的名称与工作表中ActiveX控件的名称命名一致,采用“控件类型”+顺序号组成(从1开始)的格式。因而本例中,实际使用了控件的名称来访问各个控件,从而更改其属性。
控件的排列
本例演示了如何使用代码排列各个控件。当控件的位置和名称具有规律时,则该过程只需要一个简单的图示和一些简单的数学计算就能完成。如图所示的实例演示了如何计算控件的Top属性。
使用该方法可以准确地排列各个控件,并调整窗体的大小。
使用控件数组进行赋值
本例使用了循环的方式将控件的值赋值给单元格区域。当单元格连续时,实际上可以采用控件数组完成。控件数组的概念实际上是VB中的一个概念,在Excel VBA中并不具备此功能。此处所描述的控件数组实际是将数组中各个控件对象组成一个数组。当需要赋值给工作表时,则可以使用该数组进行直接赋值。但该数组的作用域必须是整个窗体(即声明在窗体中,并独立于各个过程之外)。可以参考以下窗体代码实现赋值:
'定义控件数组
dim arrCtl(1 to 5) As Object
'窗体初始化事件
Private Sub UserForm_Initialize'变量声明,控件序号Dim ctlIndex As Integer'操作窗体With Me...For ctlIndex =1 To 5Set arrctl(cltIndex)=.Controls("TextBox" & ctlIndex)Next ctlIndexEnd With
End Sub'按钮单击事件
Private Sub Commandbutton1_Click()dim rowNew As Long...Sheet1.cells(rowNew,2).resize(1,5).value=arrCtl
End Sub
Excel 2010 VBA 入门 129 利用窗体向工作表中录入数据相关推荐
- excel中用正则匹配_excel 利用正则表达式匹配工作表中的数据
excel 利用正则表达式匹配工作表中的数据 sheet1中A列放需要匹配的数据 sheet2中A列放正则表达式,可以是多个,但至少一个 匹配到了则在sheet1中C列对应行显示相关标记内容,比如本案 ...
- Excel 2010 VBA 入门 135 利用窗体制作登录界面
题 使用窗体制作登录界面,实现当打开Excel时,隐藏工作簿,当登录完成后显示工作簿. 码 登录机制是将用户输入的用户名和密码与正确的用户名和密码进行比较,若相等,则表示登录成功,反之登录失败.本例的 ...
- Excel 2010 VBA 入门 130 利用窗体创建实时筛选浮动工具栏
目录 题 码 DefauIt和CanceI按钮 提高单元格隐藏的速度 自制浮动工具栏 动态显示与隐藏窗体 题 如图所示,该表为某单位员工档案.现希望制作一个包含有文本框的浮动工具栏,当在文本框中输入字 ...
- Excel 2010 VBA 入门 067 导入多个工作簿中的工作表
目录 示例 实现代码 导入多个工作簿中的工作表 Application. ScreenUpdating属性 示例 如图所示,在同一个目录下有多个工作表名称相同的工资汇总月报.现希望通过VBA建立该多个 ...
- Excel 2010 VBA 入门 103 利用VBA批量插入图片
目录 示例 代码: Shapes.Shape和 ShapeRange Shapes对象插入图形的方法 Excel的坐标 图形大小的调整 获取图片的原始大小 将图片按比例缩放至单元格 图片批量插入的步骤 ...
- Excel 2010 VBA 入门 104 利用VBA生成图表
目录 示例 代码 ChartObjects集合和ChartObject对象 数据系列(Series)对象 添加图表的其他方法 1.通过添加Chart对象添加图表 2.通过Shapes集合的AddCha ...
- Excel 2010 VBA 入门 102 利用VBA批量发送邮件
目录 示例 代码 CDO组件 CDO. Message. Configuration对象 前期绑定与后期绑定 New关键字创建对象 添加邮件的附件 示例 如图所示,该表为某公司员工工资单.现需要将该表 ...
- Excel 2010 VBA 入门 132 利用复合框制作工作簿/表导航
目录 题 码 复合框(ComboBox)控件 利用复合框制作二级下拉列表 题 使用复合框制作一个工作表导航,以便实现工作簿及工作表的切换. 码 创建一个窗体,使用两个复合框制作二级下拉列表,其中一个作 ...
- Excel 2010 VBA 入门 100 将xls格式工作簿批量转换为xlsx格式
目录 示例 代码 使用HasVBProject属性判断工作簿是否有代码 禁止打开工作簿时执行程序 示例 在某个文件夹下存有若干个以Excel 2003版本存储的工作簿(xls格式).将这些xls格式的 ...
最新文章
- Bootstrap之轮播图
- 吃万里路 |甜品店大盘点
- Logical Volume Manager(逻辑卷管理)
- Unity3D-Rigidbody
- neo4j 查 match
- TypeScript报错--找不到模块“path”或其相应的类型声明
- 从服务器上下载下来的代码,部署到本地时,Url自动带www前缀
- 利用memoize缓存到Redis出现多个参数同一个结果
- python可视化分析网易云音乐评论_网易云音乐评论 可视化分析
- IO流(包含常用IO体系图)
- Adobe Illustrator Mac使用教程
- 瑞芯微RK3288处理器性能,RK3288芯片参数介绍
- 奇瑞鲍思语:奇瑞新能源产品线将更加丰富
- C盘存储空间不够?拓展C盘空间的方法
- 解决新浪微博JSSDK, WB2.login()失效问题
- Pytorch实现戴口罩人脸检测和戴口罩识别(含训练代码 戴口罩人脸数据集)
- 锂电池参数含义及简单选择
- 专访|HPE测试中心总监徐盛:测试新思维-DevOps,持续测试,更敏捷,更快速
- 格雷码解析以及计算(仅供自己记录查阅)
- 17.在NBA我需要翻译-适配器模式(大话设计模式kotlin版)