如何在Userform中选中复选框时检查?

时间:2017-12-01 20:43:09

标签: vba checkbox userform excel-2016

我有一个包含Checkbox的Userform。我可以检查它的值,但无论是否检查,它总是False

更新

这就是调用UserForm的方式(这是在另一个UserForm中):

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正在查看该值,当它为真或假时,但它始终为假。

以下是复选框的所有属性:

TopBottom Properties

2 个答案:

答案 0 :(得分:1)

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

AddOutgoingForm.TopBottom2.Value

但是让我问你,TopBottom在哪里,它是一个布尔变量或另一个Checkbox?同样的表格? Subs也都在形式?你必须从某个地方调用表单,所以在工作表,工作簿,模块变量之间要小心。 TopBottom是整个项目的全局变量(在一个名为Global_Variables的模块中,也可能是公共的?)如果您没有传入或传出任何内容,您可能无法从表单内部访问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

答案 1 :(得分:1)

With AddOutgoingForm

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

您有两种选择:

  1. 在通话网站上,而不是这样做(或类似的东西):

    With New AddOutgoingForm
        .Show
        '...
    End With
    

    这样做:

    AddOutgoingForm.Show
    '...
    

    这样您就可以使用默认实例,并且复选框值检查应该有效。

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

    1. 保持呼叫网站的独立性,从不引用} 里面的默认实例表单& #39;代码隐藏。换句话说,更改UserForm的{​​{1}}。

      With AddOutgoingForm关键字是指当前实例 - 而 是您想要的。无论呼叫站点做什么,执行此操作都会使表单生效。

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