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. 给控件绑定事件响应
因为没有设计器,不能双击控件直接写事件,这时候需要用类模块来动态绑定控件的事件:
具体步骤:
- 在VBA编辑器里插入一个类模块(右键工程 → 插入 → 类模块)
- 把类模块的名称改成
clsButtonEvents(自定义名称也可以,方便识别就行) - 在类模块里写入如下代码:
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
- 回到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
相关产品推荐
相关产品推荐

