前言:我们经常用Excel制作各种表格,如公司管理人员制作公司成员的名单表;推销员为了防止丢掉客户的名片和查询客户的信息,制作一个客户名单表等。当然Access可以制作数据库,来存放数据,但是Excel作为电子表格软件,具有许多对数据库直接操作的命令,如查找、排序、筛选等。现在我们想要做一个公司成员的档案记录,在一张Excel 表格的A、B、C、D列分别记录公司客户姓名、身份证号码、性别、学历等几项记录,但是单纯利用Excel的功能我们会发现有如下几个问题:
1、容易出错。 2、不能检查是否重复输入登记。 3、经常重复输入相同的内容。
而通过VBA在Excel中建立窗体,通过窗体向Excel输入数据,可以避免以上问题。下面是一个应用系统的建立过程。
一、创建用户窗体
按下列步骤,在项目中加入一个用户窗体: 1.访问VBA,在Excel中访问VBA即进入VB编辑器。
2.选择菜单中“插入”、“添加用户窗体”命令。 3.设计窗体的第一步是设定窗体的大小,这只是设定窗体的大小的开始,以后还需要多次调整窗体的大小。要设定窗体的大小,就用鼠标拖动窗体的边沿控件,直到想要的大小。
二、将控件放在对话单中
本例是一个简单的登记程序,其功能是通过窗体来向工作表中添加数据。窗体有两个TextBox控件用于接收用户输入的信息,TextBox控件接收用户输入的身份证号码,另外一个TextBox控件用于接收用户输入的姓名;一般用了TextBox控件相应地还应该加上Label控件,用来显示一些信息,提示用户往窗体输入信息数据类型。 用TextBox控件接收用户输入的信息数据,用户每次必须输入,但是有一些信息数据却不必每次都输入。下面举例说明用OptionButton实现输入数据的思想,如性别只有“男”和“女”,添加两个OptionButton控件,其Text属性设置为“男”和“女”,定义一个变量,如果用户选择Caption属性设置为“男”的OptionButton 控件,则变量值为“男”;反之,如果用户选择Caption属性设置为“女”的OptionButton 控件,则变量值为“女”。把变量的值赋给工作簿中特定的单元格,即实现了数据输入。为了实现这两个OptionButton控件每次只能选中一个,添加一个Frame控件,把两个OptionButton控件放入同一个Frame控件中。
如图中窗体有两个TextBox控件,随之有两个Label控件。一个Caption属性为“性别”的Frame控件,里面有Caption属性分别为“男”和“女”的两个OptionButton控件。一个Caption属性为“您的学历”的Frame控件,里面有Caption 属性分别为“高中以下”、“本科”、“硕士”、“硕士以上”和“其他”的四个OptionButton 控件。另外还有两个CommandButton控件。下面是创建的窗体以及添加的控件。 三、在VB编辑器中添加模块
添加窗体以后,如果想通过窗体输入数据,然后把数据输入到工作簿的单元格中,必然涉及到窗体的数据和工作簿中的数据交换,但是二者不能直接交换,可以添加新模块。模块中的变量在窗体和工作簿中都可以调用,而且模块中的过程和函数也可以调用。 新建一个模块,输入下列语句:
'建立一些公有变量 Public xingbie Public xingming Public xueli Public shenfenzheng Public CommandButton1_Click End Sub '建立一个公有过程,在窗体和工作簿中都可以调用 Sub chushihua() shenfenzheng = "" xingming = "" xingbie = "" xueli = "" End Sub 定义了这些公有变量之后,那么下面的窗体控件的一些值可以通过公有变量在工作簿中使用。
四、对控件进行功能设置
添加的控件是用来执行一定的功能,设置功能步骤如下: 1.用鼠标选中窗体上的控件并双击该控件或者用鼠标右键单击控件并选择“查看代码”命令,进入窗体对象的编程环境。
2.单击右上角的过程即事件对话框,选中一事件。VB编辑器会自动加入类似于下面的语句:
Private Sub OptionButton5_Click()
End Sub 3.在中间的空行输入相关的VB语句,如:xueli = "硕士"。那么当运行窗体时,单击窗体OptionButton5控件则执行自动语句:xueli = "硕士"。表示把值“硕士”赋给变量xueli。
窗体及窗体上控件的事件程序代码如下:
Private Sub CommandButton2_Click() 'CommandButton2的Caption 属性为“取消”,代表“取消”按钮 UserForm1.Hide End Sub
Private Sub OptionButton1_Click() 'OptionButton1的Caption 属性为“男”,代表“男”选项控件 xingbie = "男" End Sub
Private Sub OptionButton2_Click() 'OptionButton2的Caption 属性为“女”,代表“女”选项控件 xingbie = "女" End Sub
Private Sub OptionButton3_Click() 'OptionButton3的Caption 属性为“高中以下”,代表“高中以下”选项控件 xueli = "高中以下" End Sub
Private Sub OptionButton4_Click() 'OptionButton4的Caption 属性为“本科”,代表“本科”选项控件 xueli = "本科" End Sub
Private Sub OptionButton5_Click() 'OptionButton5的Caption 属性为“硕士”,代表“硕士”选项控件 xueli = "硕士" End Sub
Private Sub OptionButton6_Click() 'OptionButton6的Caption 属性为“硕士以上”,代表“硕士以上”选项控件 xueli = "硕士以上" End Sub
Private Sub OptionButton7_Click() 'OptionButton7的Caption 属性为“请输入您的学历”, 代表“请输入您的学历”控件 Dim srxl srxl = InputBox("请输入您的学历") If srxl = "" Then End UserForm1.Show Else xueli = srxl End If End Sub
Private Sub TextBox1_Change() 'TextBox1是Caption 属性为“请输入您的身份证号码”的TextBox控件 Dim counter As Integer counter = 0 Range("A1").Select Do Until Selection.Offset(counter, 0).value = "" If TextBox1.Text = Selection.Offset(counter, 0) .value Then MsgBox ("您的身份已经登记") counter = counter +1 Loop shenfenzheng = TextBox1.Text End Sub
Private Sub TextBox2_Change() 'TextBox2是Caption 属性为“姓名:”的TextBox控件 xingming = TextBox2.Text End Sub
Private Sub UserForm_Activate() Call chushihua 'chushihua是在模块的定义的过程, 相当Excel函数,可以直接调用 End Sub
Private Sub 输入_Click() ’下面是当在窗体上单击“输入”按钮运行的代码 Dim counter As Integer Dim shenfenvalue Dim xingmingvalue counter = 0 If TextBox1.Text = "" Or TextBox2.Text = "" Or xingbie = "" Or xueli = "" Then Call chushihua End If Range("A1").Select Do Until Selection.Offset(counter, 0).value = "" shenfenvalue =Selection.Offset(counter, 0).value xingmingvalue =Selection.Offset(counter, 1).value If TextBox1.Text =shenfenvalueAnd TextBox2.Text = xingmingvalue Then MsgBox ("您的身份已经登记") End Else End If counter = counter +1 Loop Do Until Selection.Offset(counter, 0).value = "" counter = counter +1 Loop Selection.Offset(counter, 0).value = shenfenzheng Selection.Offset(counter, 1).value = xingming Selection.Offset(counter, 2).value = xingbie Selection.Offset(counter, 3).value = xueli UserForm1.Hide End Sub
五、在Excel中引用窗体
在Excel中建立一个名为“输入新数据”命令按钮来指定宏,宏语句如下: Private Sub CommandButton1_Click() ’调用窗体 UserForm1.Show ’调用过程 Call chushihua End Sub 在Excel单击命令按钮,即可调用窗体:
|