EP09. “Userform with Multiple Pages 多页表单”
🔒 登录后可标记已读- 表单要放的内容太多时,可以用 Multipage 控件把内容分页呈现
- 做一个两页的表单:第一页填个人信息(姓名、性别),第二页从列表选一张画作、同时预览图片
- 分页只是视觉呈现,读写控件值不用管使用者当下停在哪一页
- 前置知识:EP06 的列表框事件、基本的图片显示
重点内容
适用版本
桌面版通用(Excel 365 / 2021 / 2019 等)。
表单结构
用一个 Multipage 控件分两页:
- 第一页:姓名文本框、性别选项按钮
- 第二页:画作列表框 + 一个 Image 控件预览图片
[截图:Userform 设计视图里的 Multipage 控件,顶部两个页签分别是第一页和第二页]
初始化:填画作选项
Private Sub UserForm_Initialize()
With ListBox1
.AddItem "Mountains"
.AddItem "Sunset"
.AddItem "Beach"
.AddItem "Winter"
End With
End Sub
选中列表项目时预览对应图片
Private Sub ListBox1_Click()
If ListBox1.ListIndex = 0 Then
Image1.Picture = LoadPicture("C:\test\Mountains.jpg")
End If
If ListBox1.ListIndex = 1 Then
Image1.Picture = LoadPicture("C:\test\Sunset.jpg")
End If
If ListBox1.ListIndex = 2 Then
Image1.Picture = LoadPicture("C:\test\Beach.jpg")
End If
If ListBox1.ListIndex = 3 Then
Image1.Picture = LoadPicture("C:\test\Winter.jpg")
End If
End Sub
[截图:切到第二页后,点选列表框里的画作名称,Image 控件跟着显示出对应的预览图片]
OK 按钮:把两页的数据一起写进工作表
Private Sub CommandButton1_Click()
Dim emptyRow As Long
Sheet1.Activate
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
Cells(emptyRow, 1).Value = TextBox1.Value
Cells(emptyRow, 2).Value = TextBox2.Value
If OptionButton1.Value = True Then
Cells(emptyRow, 3).Value = "Male"
Else
Cells(emptyRow, 3).Value = "Female"
End If
Cells(emptyRow, 4).Value = ListBox1.Value
Unload Me
End Sub
逻辑说明
emptyRow用CountA算出 A 列已经有几笔数据,往下一行就是新数据该写入的位置- 虽然控件分布在两个不同的页面,写入数据时不用管使用者当下停在哪一页,直接引用控件名字就能读到值——Multipage 只是视觉上分页,控件本身还是同一个表单里的
学完你会
- ✅ 用 Multipage 控件把表单内容分成好几页呈现
- ✅ 用
LoadPicture根据列表框选项动态显示对应图片 - ✅ 知道分页只是视觉分组,读写控件值不用先切到该页面
常见错误
- 图片路径写死成固定路径(
C:\test\...),换一台电脑找不到图片文件 ListIndex判断条件漏掉某个选项,或者顺序跟AddItem加入的顺序对不上,选到的图片跟清单不一致- 以为要先切到某一页才能读取/写入那一页控件的值,实际上不需要,直接引用控件名字就能存取
Sources
Blog / Website: