如果必填字段为空,则Excel / VBA取消选中复选框

时间:2017-04-14 08:31:52

标签: excel vba excel-vba checkbox

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

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

现在我想要更改它,对于每一行检查必填字段是否为空如果然后取消选中与空字段相同的行中的复选框,同样我需要干净的行颜色:

EntireRow.Interior.ColorIndex = xlColorIndexNone

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

ALSO

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

我想创建一些函数,允许我检查第149行中的任何字段是否为文本“必须然后检查下面的行是否为空,如果然后取消选中。所以我尝试了这样:

如果ws.Rows(“149”)=“强制性”那么 如果ws.Range(“C”& chk.TopLeftCell.Row).Value 但我不知道如何在每列中检查值

2 个答案:

答案 0 :(得分:1)

在If statent:

中使用Worksheet的Cells属性而不是像这样的Range
If ws.Cells(3, chk.TopLeftCell).Value = ""

答案 1 :(得分:0)

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

C140

说明: 我仅将C的行更改为Range("C140") +复选框所在的行号。我希望这是你一直在寻找的。

关于您最初尝试将C140:C150(一个单元格)更改为If等一系列单元格:当然这是行不通的。这就像请将这个苹果与这10个苹果进行比较。作为回报,你会得到10个答案,其中一些可能是真的,而其他人可能对你的ture条款是错误的。 VBA不知道要采用falsesectionHeaderHeight中的哪一个。