如何使用 VBA 从 Excel 用户窗体中读取复选框的值
Posted
技术标签:
【中文标题】如何使用 VBA 从 Excel 用户窗体中读取复选框的值【英文标题】:How to use VBA to read the values of a checkbox from an Excel userform 【发布时间】:2012-09-04 23:13:54 【问题描述】:我创建了一个包含两个复选框的用户表单。我希望能够根据每个框是选中还是未选中来做不同的事情。但是,似乎无论我做什么,它总是会告诉我复选框的原始值(false 和 false)。以下是单击 CommandButton1 所附的代码:
Private Sub CommandButton1_Click()
ReadData
End Sub
这里是 ReadData:
Sub ReadData()
Dim myForm As UserForm
Set myForm = UserForms.Add("ComplaintEntryForm")
Debug.Print (myForm!CheckBox1.Name)
Debug.Print (myForm!CheckBox1.Value)
Debug.Print (myForm!CheckBox2.Name)
Debug.Print (myForm!CheckBox2.Value)
End Sub
无论这些框如何被选中,即时窗口总是显示如下:
VBA.UserForms.Add("ComplaintEntryForm").Show
CheckBox1
False
CheckBox2
False
我有整个操作的截图,但是因为我是新用户所以不让我上传。
【问题讨论】:
【参考方案1】:试试这个方法来加载和显示表单(这在一个普通的模块中):
Sub main()
Dim myForm As ComplaintEntryForm
Set myForm = New ComplaintEntryForm
myForm.Show
Set myForm = Nothing
End Sub
在用户窗体自己的模块中,添加以下内容:
Private Sub CheckBox1_Change()
readData
End Sub
Private Sub CheckBox2_Change()
readData
End Sub
Private Sub UserForm_Initialize()
Me.CheckBox1.Value = True
Me.CheckBox2.Value = False
End Sub
Private Sub readData()
Debug.Print Me.CheckBox1.Name
Debug.Print Me.CheckBox1.Value
Debug.Print Me.CheckBox2.Name
Debug.Print Me.CheckBox2.Value
End Sub
我已将两个复选框初始化为 Initialize
事件中的特定值。这意味着我们可以确定表单的起始状态
【讨论】:
您好,非常感谢您的回复;效果很好。我只是想避免在 UserForm 自己的模块中输入太多代码,因为我正在动态创建 UserForm,而我知道如何将代码添加到 UserForm 的唯一方法是这样的:使用 TempForm.CodeModule 。 InsertLines 1, "Sub CommandButton1_Click()" .InsertLines 2, "'Do stuff" .InsertLines 3, "End Sub" End With which is a pain,尤其是引用。但事实证明我只需要 18 行,所以没关系。非常感谢您的帮助!以上是关于如何使用 VBA 从 Excel 用户窗体中读取复选框的值的主要内容,如果未能解决你的问题,请参考以下文章
如何在Excel VBA中定义一个在窗体控件和模块中均能使用的变量?
单击保存按钮后如何在用户窗体中添加依赖于另一个组合框的excel vba组合框而不影响清除数据功能