我需要一点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
答案 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
循环中也存在一些问题。它可能不会起作用,但我需要更好地了解那里发生的事情,以便为您提供帮助。
我希望这会有所帮助。