![d0c71d5d02cdceeb03037383ae0168a5.png](https://img-blog.csdnimg.cn/img_convert/d0c71d5d02cdceeb03037383ae0168a5.png)
学习资源:《Excel VBA从入门到进阶》第58集 by兰色幻想
一、控件简介
关于本节所讲的所有控件,可以在工具箱找到,或右键点击“附加控件”去添加。
![40cede7d0f8fb2b321f58247956ed021.png](https://img-blog.csdnimg.cn/img_convert/40cede7d0f8fb2b321f58247956ed021.png)
- 复选框
可以同时选取多个。
![f46c4a10963a40384fc372e1149a64b6.png](https://img-blog.csdnimg.cn/img_convert/f46c4a10963a40384fc372e1149a64b6.png)
写一段程序,在文本框中显示复选内容:
三个选项的名称分别为CheckBox1、CheckBox2、CheckBox3。
文本框的名称为TextBox3。
Private Sub CommandButton1_Click()
Dim sr As String
If CheckBox1.Value = True Then sr = sr & " " & CheckBox1.Caption
If CheckBox2.Value = True Then sr = sr & " " & CheckBox2.Caption
If CheckBox3.Value = True Then sr = sr & " " & CheckBox3.Caption
TextBox3.Value = sr
End Sub
运行演示:
![c306426c07ad72f5058eec2f576cf8dd.gif](https://img-blog.csdnimg.cn/img_convert/c306426c07ad72f5058eec2f576cf8dd.gif)
2. 选项按钮
在其框架里只能选取一个,不同框架互不影响。
![201c76cf2102f3879c9a48c719d98475.png](https://img-blog.csdnimg.cn/img_convert/201c76cf2102f3879c9a48c719d98475.png)
3. 框架
可以把控件里的东西区分为很多组,而且组和组之间都是相互独立,互不影响的。而且在编辑的时候可以同时移动和选取组里的东西。
![bc8f17710a62d5b0860f9764a7b2aa1a.png](https://img-blog.csdnimg.cn/img_convert/bc8f17710a62d5b0860f9764a7b2aa1a.png)
4. 图像
在控件里插入图像。
![42aeb60459ea2732e0a5c9bc1183ed5e.png](https://img-blog.csdnimg.cn/img_convert/42aeb60459ea2732e0a5c9bc1183ed5e.png)
例:把某路径下的图片文件名称都加载到列表中,点击图片名,就显示该图片。
(1)加载事件,把当前路径下的图片文件通过列表框加载过来。
Private Sub UserForm_Initialize()
Dim f As String
'通过dir查找图片文件
f = Dir(ThisWorkbook.path & "pic*.jpg")
Do
Me.ListBox1.AddItem f
f = Dir
Loop Until Len(f) = 0
End Sub
(2)单击事件,选中后加载图片
Private Sub ListBox1_Click()
Dim path
path = ThisWorkbook.path & "/pic/" & ListBox1.Value
'用loadpicture函数加载图片
Image1.Picture = LoadPicture(path)
End Sub
运行演示:
![9eeba18c79641707ec9b2b8f33e123af.gif](https://img-blog.csdnimg.cn/img_convert/9eeba18c79641707ec9b2b8f33e123af.gif)
5. 微调和滚动条
![ed5c7a8b371f34ea2f3afe782207819a.png](https://img-blog.csdnimg.cn/img_convert/ed5c7a8b371f34ea2f3afe782207819a.png)
![eb03b17bd5fea6e21f91c5f4866329a9.png](https://img-blog.csdnimg.cn/img_convert/eb03b17bd5fea6e21f91c5f4866329a9.png)
① 设置最大值和最小值(调整范围)
在属性窗口的Max属性和Min属性输入。
![ea77974697c3b6108832c66c9ef5990d.png](https://img-blog.csdnimg.cn/img_convert/ea77974697c3b6108832c66c9ef5990d.png)
② 步长(每点击两边按钮和滑块增加或减少的步长)
Largechange属性,只用于滚动条,点击一次中间空白区域增加或减少的数。
Smallchange属性,点击一次按钮的左右按钮变化的数。
例:把滚动条的Largechange属性设置为10,Smallchange属性设置为1,演示一下效果。
![f6aa4cf6856ba8f2563939033c250456.png](https://img-blog.csdnimg.cn/img_convert/f6aa4cf6856ba8f2563939033c250456.png)
![b44dabcfd6cec620a6cb6441a9d86188.gif](https://img-blog.csdnimg.cn/img_convert/b44dabcfd6cec620a6cb6441a9d86188.gif)
微调只有Smallchange属性,因为没有中间的空白区域嘛
![73f80b1c5f2c78c1263f0d69c52c36db.png](https://img-blog.csdnimg.cn/img_convert/73f80b1c5f2c78c1263f0d69c52c36db.png)
③事件
使用微调和滚动按钮就是为了调节数值,所以最终要把数值取出来,这就涉及到事件了。
- change事件:
如果滚动条数值有变,把数值放到文本框控件中。
Private Sub ScrollBar1_Change()
TextBox1.Value = ScrollBar1.Value
End Sub
如果微调数值有变,把数值放到文本框控件中
Private Sub SpinButton1_Change()
TextBox1.Value = ScrollBar1.Value
End Sub
- SpinUp事件
点击向上按钮,数值+1放到文本框控件中
Private Sub SpinButton1_SpinUp()
TextBox2 = DateAdd("d", -1, TextBox2.Value)
End Sub
- SpinDown事件
点击向下按钮,数值+1放到文本框控件中
Private Sub SpinButton1_SpinDown()
TextBox2 = DateAdd("d", 1, TextBox2.Value)
End Sub
可以在上面的演示中看到的数值的显示,就是因为有写这些事件。
6. 多页控件
在工具箱找到多页控件,创建,默认两页,右键可新建页。
![880dbb9a0e9fc89d7add22fda1b80674.gif](https://img-blog.csdnimg.cn/img_convert/880dbb9a0e9fc89d7add22fda1b80674.gif)
① 多页控件的多行是指什么?
MultiRow 属性:当多页控件的标签很多时,可以分多行显示。
![563479d88bc21a5113fd6bc7ffd64575.png](https://img-blog.csdnimg.cn/img_convert/563479d88bc21a5113fd6bc7ffd64575.png)
![80aaa4516f1bf73dc4439ad7ea40fc7e.png](https://img-blog.csdnimg.cn/img_convert/80aaa4516f1bf73dc4439ad7ea40fc7e.png)
② 多页控件的值
1)选择第1个标签,Value为0,选择第2个Value为1....选择第N个Value为N-1。value是从0开始算。
2)设置值的属性后可以直接选取这个标签。如MultiPage1.Value=0 就可以选取第2个标签。(后面会举一个示例)
Private Sub MultiPage1_Change()
MsgBox MultiPage1.Value
End Sub
③ 隐藏标签
Style属性值为2时,可以隐藏标签
Me.MultiPage1.Style = 2
二、多页控件的实例
做一个有三个步骤的向导页面,通过多页控件的值的改变来跳转页面。
界面是这样设计的 ↓
![5d6aef6ebbde24073fe0b26bc3befd77.png](https://img-blog.csdnimg.cn/img_convert/5d6aef6ebbde24073fe0b26bc3befd77.png)
代码如下:
① 首先是一个发生事件,去获取多页控件的值,让它可以根据选取改变
Private Sub UserForm_Initialize()
Me.MultiPage1.Style = 2 '隐藏标签,让用户只能通过点击“上一步”和“下一步”来进行操作,而不是页面标签切换。
Me.MultiPage1.Value = 0 '可以设置多页控件的值,来改变选取
按钮权限 '调用程序
End Sub
② 上面有一段调用程序,作用是判断按钮对应跳转的页,并显示所在步骤。
Sub 按钮权限()
Select Case Me.MultiPage1.Value
Case 0 '如果多页控件的值是0,证明它在第一页,要禁止点击上一步
上一步.Enabled = False
Me.Caption = "第1步 共" & Me.MultiPage1.Pages.Count & "步"
Case Me.MultiPage1.Pages.Count - 1 '如果多页控件的值是总页数-1(多页控件的值从0开始),证明它在最后一页,要禁止点击下一步
下一步.Enabled = False
Me.Caption = "第" & MultiPage1.Pages.Count & "步 共" & Me.MultiPage1.Pages.Count & "步"
Case Else '如果都不是上面两种情况,那就是在中间页数,上一步和下一步都可以点击
上一步.Enabled = True
下一步.Enabled = True
Me.Caption = "第" & MultiPage1.Value + 1 & "步 共" & Me.MultiPage1.Pages.Count & "步"
End Select
End Sub
③ 用Click事件,获取点击“上一步”和“下一步”按钮所对应多页控件的值。
Private Sub 上一步_Click()
Me.MultiPage1.Value = Me.MultiPage1.Value - 1
按钮权限
End Sub
Private Sub 下一步_Click()
Me.MultiPage1.Value = Me.MultiPage1.Value + 1
按钮权限
End Sub
运行演示:
![d42a70c924afa44125535ccac5afd188.gif](https://img-blog.csdnimg.cn/img_convert/d42a70c924afa44125535ccac5afd188.gif)