带有复选框的VBA Excel自定义用户表单,不适用于宏代码

时间:2016-09-09 10:16:25

标签: excel vba excel-vba userform

我需要一点VBA帮助。我创建了一个自定义用户表单,其中包含选项yes,n / a,no和要输入的命令按钮。现在我想添加逻辑,它应该只过滤显示的行。它总是在我的第一行if(如果checkbox1.enabled)返回错误。我已经尝试过,如果checkbox1.value为True,但它仍然无法正常工作。有任何想法吗?谢谢!

Private Sub CommandButton1_Click()

    Dim runner As Variant, row As Variant
    row = 9

    If CheckBox1.Enabled Is True Then
        For Each runner In row
            If Not runner.Hidden Then
                If cell(row, 10).Value Is Empty Then
                    runner.Hide
                End If
            End If

        Next runner
    End If


End Sub

1 个答案:

答案 0 :(得分:1)

要在第一个If中解决问题,您需要将其更改为

If CheckBox1.Enabled = True Then

这是检查VBA中的值是True的正确语法。以下是一种可接受的语法:

If CheckBox1.Enabled Then

如果此类验证中未提供任何内容,VBA将默认检查该值是否为True。同样,要检查值是否为False,您可以执行以下操作:

If CheckBox1.Enabled = False Then

或者

If Not CheckBox1.Enabled Then

修复当前问题后,您会在以下行中发现另一个问题:

If cell(row, 10).Value Is Empty Then

要检查单元格是否为空,正确的语法将是

If IsEmpty(Cells(row, 10).Value) Then

请注意,我使用Cells而非cell。另外,这将检查单元格的全局引用,该单元格又​​查找活动工作表中的单元格。假设您要检查Sheet1中的单元格,但用户在使用您的用户窗体时激活Sheet2,则会检查Sheet2中的单元格。为避免这种情况,建议您对单元格进行适当的引用,如下所示:

If IsEmpty(ThisWorkbook.Worksheets("YourSheetName").Cells(row, 10).Value) Then

如果您的代码与您发布的完全相同,则For循环中也存在一些问题。它可能不会起作用,但我需要更好地了解那里发生的事情,以便为您提供帮助。

我希望这会有所帮助。