MICROSOFT

EP09. “Userform with Multiple Pages 多页表单”

首页 Microsoft 工具 Excel · VBA · Userform · EP09
约 6 分钟· #EP09#Excel#Userform
🔒 登录后可标记已读
  • 表单要放的内容太多时,可以用 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

逻辑说明

  • emptyRowCountA 算出 A 列已经有几笔数据,往下一行就是新数据该写入的位置
  • 虽然控件分布在两个不同的页面,写入数据时不用管使用者当下停在哪一页,直接引用控件名字就能读到值——Multipage 只是视觉上分页,控件本身还是同一个表单里的

学完你会

  • ✅ 用 Multipage 控件把表单内容分成好几页呈现
  • ✅ 用 LoadPicture 根据列表框选项动态显示对应图片
  • ✅ 知道分页只是视觉分组,读写控件值不用先切到该页面

常见错误

  • 图片路径写死成固定路径(C:\test\...),换一台电脑找不到图片文件
  • ListIndex 判断条件漏掉某个选项,或者顺序跟 AddItem 加入的顺序对不上,选到的图片跟清单不一致
  • 以为要先切到某一页才能读取/写入那一页控件的值,实际上不需要,直接引用控件名字就能存取

Sources

Blog / Website:

  1. Userform with Multiple Pages