如何检查用户表单中的复选框何时被选中?

How to check for when a checkbox is checked in a Userform?

我有一个带有复选框的用户表单。我能够检查它的值,但它总是 False 无论是否被检查。

更新

这是调用用户窗体的方式(这是在另一个用户窗体中):

Private Sub AddOutgoingbtn_Click()
    With New AddIncomingForm
        .TopBottom.Value = False
        .Show
        .Repaint
    End With
End Sub

结束更新

我创建了一个 sub 来查找值的变化,例如:

Sub TopBottom2_Change()
    With AddOutgoingForm
        If .TopBottom2.Value = True Then TopBottom = True
        If .TopBottom2.Value = False Then TopBottom = False
    End With
End Sub

但无论我做什么,.TopBottom2.Value 总是 False

我在 With 行上放置了一个断点,这样我就知道它会碰到这个 Sub,然后我每次都会单步执行它。我打开 UserForm 并选中该框,单步执行并且值为 False,然后我取消选中该框并单步执行。该值仍然是 False.

我没有使用 VBA 以任何其他方式设置值。我正在检查 UserForms 代码中的值,而不是在任何其他地方。

我在计算模块中有一个 If,它正在查看此值的真假,但它始终为假。

复选框的所有属性如下:

我假设复选框确实在您的用户表单上,所以只需使用我或者您可以使用

AddOutgoingForm.TopBottom2.Value

但是让我问你,TopBottom 在哪里?它是布尔变量还是另一个复选框?也是在同一个表格上吗?潜艇也都在形式上?您必须从某个地方调用表单,因此在工作表、工作簿、模块变量之间要小心。 TopBottom 是整个项目的全局变量(在一个名为 Global_Variables 的模块中,前面可能有 Public 吗?)如果您没有传递任何内容,您可能无法从表单内部访问 TopBottom进还是出。

Private Sub TopBottom2_Change()
    If (Me.TopBottom2.Value) = True Then 
         Me.TopBottom.Value = True
    Else
         Me.TopBottom.Value = False
    End If
 End Sub

干杯, -WWC

With AddOutgoingForm

这是指表单的默认实例,它可能是也可能不是当前显示的实例。

你有两个选择:

  1. 在呼叫站点,而不是这样做(或类似的事情):

    With New AddOutgoingForm
        .Show
        '...
    End With
    

    这样做:

    AddOutgoingForm.Show
    '...
    

    这样您将使用默认实例并且复选框值检查应该可以工作。

    ...但是 IMO that's a very very bad idea,因为那样的话您的表单包含的代码只有在您显示默认实例时才会起作用。


  1. 单独保留调用站点,并且从不引用UserForm默认实例 inside 该表单的代码隐藏。换句话说,将 With AddOutgoingForm 更改为 With Me

    Me 关键字指的是 current 实例 - that 就是您想要的。这样做将使表单工作,而不管调用站点做什么。

    或者,完全删除 With 块:With Me 不会在这里做任何有用的事情。