【问题标题】:How to use VBA to read the values of a checkbox from an Excel userform如何使用 VBA 从 Excel 用户窗体中读取复选框的值
【发布时间】: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

我有整个操作的截图,但是因为我是新用户所以不让我上传。

【问题讨论】:

    标签: excel vba checkbox userform


    【解决方案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 行,所以没关系。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 2020-11-12
    • 2020-10-09
    • 1970-01-01
    • 2020-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多