VBA Excel自定义用户窗体与checkbox,将无法在macros代码中工作

我需要一点VBA的帮助。 我创build了一个自定义用户窗体,其中包含选项yes,n / a,no和一个用于input的命令button。 现在我想添加逻辑,它应该只过滤显示的行。 它总是返回错误在我的第一条线(如果checkbox1.enabled)。 我已经尝试,如果checkbox1.value是真的,但它仍然不会工作。 有任何想法吗? 谢谢!

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 

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

 If CheckBox1.Enabled = True Then 

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

 If CheckBox1.Enabled Then 

如果在这种validation中没有提供任何内容,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的单元格。 为避免这种情况,build议您对单元格进行适当的引用,如下所示:

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

如果您的代码与您发布的代码完全相同,那么您的For循环中也存在一些问题。 这可能不起作用,但我需要更好地了解那里发生了什么,以帮助你。

我希望这有帮助。