如果必填字段为空,Excel / VBA将取消选中checkbox

我写了一个函数,对于文档中的每个checkbox,检查字段C140是否为空,如果是,则取消选中同一行中的checkbox。

Sub MarkCheckBoxes() Dim chk As CheckBox Dim ws As Worksheet Set ws = ActiveSheet For Each chk In ws.CheckBoxes If ws.Range("C140").Value = "" Then chk.Value = False Else chk.Value = True End If Next chk End Sub 

现在我想改变,每行检查是否必填字段为空,如果是然后取消选中与空字段相同的行中的checkbox,也需要干净的行颜色:

 EntireRow.Interior.ColorIndex = xlColorIndexNone 

当我将range("c140")更改为range("c140:c150")我的错误不匹配。

拉尔夫给我第一部分的答案,但现在我有另一个问题。

我想做一些函数,让我检查是否有任何字段在第149行是文本“强制性然后检查下面的行是否为空,如果是然后做取消select所以我试过这样的:

如果ws.Rows(“149”)=“强制”然后如果ws.Range(“C”&chk.TopLeftCell.Row)。价值但我不知道如何写第二个如果检查每列中的值

我相信你可能正在寻找这样的东西:

 Sub MarkCheckBoxes() Dim chk As CheckBox Dim ws As Worksheet Set ws = ActiveSheet For Each chk In ws.CheckBoxes If ws.Range("C" & chk.TopLeftCell.Row).Value = vbNullString Then chk.Value = False Else chk.Value = True End If Next chk End Sub 

解释:我只将C140的行改为C +checkbox所在的行号。 我希望这是你一直在寻找的东西。

关于你最初尝试改变Range("C140") (这是一个单元格)的单元格范围,如C140:C150 :当然,这是行不通的。 那就好比请把这个苹果和这10个苹果比较一下 。 作为回报,你会得到10个答案,其中一些可能是真实的,而另外一些可能对你的If子句是错误的。 VBA不会知道哪个或哪个false

使用工作表的单元格属性,而不是像你这样的If范围中的范围:

 If ws.Cells(3, chk.TopLeftCell).Value = ""