首页 文章

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

提问于
浏览
1

我有一个具有复选框的Userform . 我能够检查它的值,但无论是否检查,它总是 False .

Update

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

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

End Update

我创建了一个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 ,当它为true或falses时,它会查看此值,但它始终为false .

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

TopBottom Properties

2 回答

  • 1

    使用AddOutgoingForm

    那个's referring to the form'的默认实例,可能是也可能不是当前正在显示的实例 .

    您有两种选择:

    • 在呼叫站点,而不是这样做(或类似的东西):
    With New AddOutgoingForm
        .Show
        '...
    End With
    

    做这个:

    AddOutgoingForm.Show
    '...
    

    这样你将使用默认实例,复选框值检查应该工作 .

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


    • 保持呼叫站点单独, NEVER 引用该表单代码隐藏中的 UserForm 的默认实例 . 换句话说,为 With Me 更改 With AddOutgoingForm .

    Me 关键字引用 current 实例 - 这就是您想要的 . 无论调用站点执行什么操作,执行此操作都将使表单生效 .

    或者,只需完全删除 With 块: With Me 在此处不会执行任何有用的操作 .

  • 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

相关问题