You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS版Excel 2018无UserForm UI设计器,能否通过VBA代码创建?

在Mac版Excel 2018中用VBA代码创建UserForm

嗨,我完全懂你的困扰——Mac版Excel从2016开始确实砍掉了可视化的UserForm设计器,不像Windows版那样能拖拖拽拽做UI。不过别担心,完全可以通过纯VBA代码手动创建UserForm和上面的控件,功能一点不打折扣!下面是具体的实现步骤和示例:

1. 先搞定空白UserForm(可选但更规范)

虽然没有可视化设计器,但你还是能在VBA编辑器里插入一个空白UserForm:

  • 按下Option + F11打开VBA编辑器
  • 右键点击你的Excel工程 → 插入 → UserForm
    这时候会生成一个空白的UserForm,你看不到设计界面,但可以通过代码对它进行全方面操作。

2. 用代码动态添加控件并设置属性

接下来在UserForm的Initialize事件里写代码,就能给它加上输入框、列表框、按钮这些控件,还能自定义位置、大小、标题等属性。

示例代码:创建带输入框、列表框和按钮的表单

Private Sub UserForm_Initialize()
    ' 先设置UserForm本身的基础属性
    Me.Caption = "我的自定义表单"
    Me.Width = 300
    Me.Height = 250
    
    ' 添加提示标签
    Dim lblName As MSForms.Label
    Set lblName = Me.Controls.Add("Forms.Label.1")
    lblName.Caption = "输入姓名:"
    lblName.Left = 20
    lblName.Top = 20
    lblName.Width = 80
    lblName.Height = 20
    
    ' 添加文本输入框
    Dim txtName As MSForms.TextBox
    Set txtName = Me.Controls.Add("Forms.TextBox.1")
    txtName.Name = "txtUserName"
    txtName.Left = 110
    txtName.Top = 20
    txtName.Width = 150
    txtName.Height = 20
    
    ' 添加列表框并填充选项
    Dim lstOptions As MSForms.ListBox
    Set lstOptions = Me.Controls.Add("Forms.ListBox.1")
    lstOptions.Name = "lstChoices"
    lstOptions.Left = 20
    lstOptions.Top = 60
    lstOptions.Width = 240
    lstOptions.Height = 100
    lstOptions.AddItem "选项1"
    lstOptions.AddItem "选项2"
    lstOptions.AddItem "选项3"
    
    ' 添加确认按钮(事件绑定后面单独讲)
    Dim btnConfirm As MSForms.CommandButton
    Set btnConfirm = Me.Controls.Add("Forms.CommandButton.1")
    btnConfirm.Caption = "确认"
    btnConfirm.Name = "btnSubmit"
    btnConfirm.Left = 100
    btnConfirm.Top = 180
    btnConfirm.Width = 80
    btnConfirm.Height = 30
End Sub

3. 给控件绑定事件响应

因为没有设计器,不能双击控件直接写事件,这时候需要用类模块来动态绑定控件的事件:

具体步骤:

  1. 在VBA编辑器里插入一个类模块(右键工程 → 插入 → 类模块)
  2. 把类模块的名称改成clsButtonEvents(自定义名称也可以,方便识别就行)
  3. 在类模块里写入如下代码:
Public WithEvents btn As MSForms.CommandButton

Private Sub btn_Click()
    ' 这里写按钮点击后的逻辑
    Dim uf As UserForm1
    Set uf = UserForm1
    
    ' 获取输入框和列表框的值
    Dim userName As String
    Dim selectedOption As String
    userName = uf.Controls("txtUserName").Text
    selectedOption = uf.Controls("lstChoices").Value
    
    ' 示例:把内容输出到Sheet1
    ThisWorkbook.Sheets("Sheet1").Range("A1").Value = "姓名:" & userName
    ThisWorkbook.Sheets("Sheet1").Range("A2").Value = "选择:" & selectedOption
    
    ' 关闭表单
    uf.Hide
End Sub
  1. 回到UserForm的代码窗口,修改Initialize事件,添加事件绑定的代码:
' 在UserForm模块顶部声明类对象
Private btnEvent As clsButtonEvents

Private Sub UserForm_Initialize()
    ' ... 保留之前的控件创建代码 ...
    
    ' 给按钮绑定点击事件
    Dim btnConfirm As MSForms.CommandButton
    Set btnConfirm = Me.Controls.Add("Forms.CommandButton.1")
    btnConfirm.Caption = "确认"
    btnConfirm.Name = "btnSubmit"
    btnConfirm.Left = 100
    btnConfirm.Top = 180
    btnConfirm.Width = 80
    btnConfirm.Height = 30
    
    Set btnEvent = New clsButtonEvents
    Set btnEvent.btn = btnConfirm
End Sub

4. 运行显示你的UserForm

最后在普通模块里写一个宏,用来触发显示表单:

Sub ShowMyUserForm()
    UserForm1.Show
End Sub

运行这个宏,就能看到你用代码搭建的完整UserForm了!

小提示

  • 确保VBA编辑器里已经引用了Microsoft Forms 2.0 Object Library(一般默认已引用,若没有可通过「工具→引用」勾选)
  • 控件的类名要准确,比如文本框是Forms.TextBox.1,按钮是Forms.CommandButton.1,列表框是Forms.ListBox.1
  • 给动态创建的控件设置Name属性,方便后续引用和操作

内容的提问来源于stack exchange,提问作者user1773603

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:19:44