VBA控件是制作UI(用户界面)的基本单元,控件的使用使得VBA应用可以更灵活,同时功能更为强大。
工作表内的ActiveX控件
ActiveX控件在开发者工具(developer)选项卡中 ,如果选项卡中没有开发者工具,那么需要先激活开发者工具。
步骤 : 文件(File)-->选项(option)-->自定义功能区(Customize Ribbon)-->勾选开发者工具(developer)
设计UI
点击开发者工具(developer)中的插入(insert) , 然后就可以看到ActiveX Control , 我们先选择Combobox (复选框) ,并在工作表中进行绘制,再选择CommandButton (按钮) , 最后再绘制几个Textbox(文本框)用来显示员工信息,具体见以下视频:
最后再绘制一个image 图片框,用来显示不同的图片,效果如下
员工卡数据及思路
先在Sheets(“Sheet1”)A23:E30区域加入以上原始信息,如下所示:
员工卡的思路如下:
首先在右端的Combobox中加入可选择的姓名 ,选择姓名后,点击确认按钮后,相对应的姓名、电话、职位、年龄、工龄等信息就会出现在左端的文本框中 , 而对应人名的头像则会出现在右端的图片框中。
Combobox 中加入数据
因此我们首先在workbook_open (代表打开工作簿时,执行程序)中加入combobox选择框的姓名数据,操作如下视频:
代码如下:
Private Sub Workbook_Open() For i = 24 To 30 Step 1 Sheets("Sheet1").ComboBox1.AddItem Sheets("Sheet1").Range("A" & i).Value NextEnd Sub
代码解释:
第一行:开始语句打开工作簿
第二行:按数据源中的信息,由于姓名分布于24至30行,因此我们遍历的范围也是24至30
第三行:在表格Sheet1 中的Combobox1中使用Additem的方法加入 遍历的A24至A30行的数据
第四行:如果i小于30则返回第二行,如果i =30 则结束循环
第五行:结束语句
准备图片
在本Excel的同级目录下,准备和表格中姓名相同的图片,也就是将图片命名为姓名.jpg , 右键点击图片,进入属性,详细信息里面有图片的像素,可以使用照片编辑器,将图片大小编辑成同样的宽和高,以下是200X200 ,这样图片框显示时,所有图片都是一样大的,更美观。
编写代码
在设计模式下,双击确认按钮,进入CommandButton_click (点击按钮时执行程序)中编辑代码:
Private Sub CommandButton1_Click() person_name = Sheets("Sheet1").ComboBox1.Value Path = ThisWorkbook.Path Sheets("Sheet1").Image1.Picture = LoadPicture("") For i = 24 To 30 Step 1 If person_name = Range("A" & i).Value Then Str_path = "" & Path & "/" & person_name & ".jpg" Sheets("Sheet1").TextBox1.Text = Range("A" & i).Value Sheets("Sheet1").TextBox2.Text = Range("B" & i).Value Sheets("Sheet1").TextBox3.Text = Range("C" & i).Value Sheets("Sheet1").TextBox4.Text = Range("D" & i).Value Sheets("Sheet1").TextBox5.Text = Range("E" & i).Value Sheets("Sheet1").Image1.Picture = LoadPicture(Str_path) End If NextEnd Sub
我们解释一下代码:
第一行:开始语句,代表在按钮点击以后,触发这个程序开始执行,我们也称它为监听点击事件
第二行:将表格Sheet1中的Combobox选择框中的值赋值给person_name
第三行:将本工作簿的路径赋值给Path变量
第四行:将Sheet1中的image1(即图片控件)中的图片进行清除,这样做的
目的是:在执行员工卡信息时,保证image1中没有图片,如果不加这一句,在执行很多次以后图片会不断堆积在image1中。
第五行:按照数据源中的数据的行数范围进行遍历。
第六行:在没遍历一行时,我们都进行判定,判定该A列该行的姓名是不是和Combobox1当前的值一致,如果一致,那么执行7至12行语句,如果不一致,则继续判定下一行,直至i=30.
第七行:将本工作簿目录路径和照片名称(带”.jpg“后缀)拼接起来,使得加载图片时,程序知道需要调用什么图片。
第八行:当姓名=Combobox1中的值时,我们获得了一个 i 行,这时我们就能将A列i行的姓名赋值给Textbox1,让姓名显示在第1个文本框中
第九行:将B列i行的电话赋值给Textbox2,让电话显示在第2个文本框中
第十行:将C列i行的职位赋值给Textbox3,让职位显示在第3个文本框中
第十一行:将D列i行的年龄赋值给Textbox4,让年龄显示在第4个文本框中
第十二行:将E列i行的工龄赋值给Textbox4,让工龄显示在第5个文本框中
第十三行:使用loadPicture(Path)函数,将路径内对应姓名的图片加载到图片框image1中
第十四行:条件判断的结束语句end if
第十五行:如果i小于30则返回到第五行,执行下一个i,如果i =30 则结束循环
第十六行:程序结束语句
这样,一个员工信息卡的程序就执行完毕了。
习题及上一章答案
习题:试着自己制作一个员工信息卡。
Excel VBA入门教程4 for循环习题答案:
Sub ninenine()For i = 1 To 9 Step 1 For j = 1 To i Step 1 Sheets("Sheet4").Cells(i, j).Value = i & " X " & j & " = " & i * j NextNextEnd Sub' For 专题习题答案
更多内容和资料请关注: