如果另一个单元格= FALSE,则删除单元格内容的vba

时间:2017-10-01 11:50:12

标签: excel-vba vba excel

您好我是VBA和宏的新手。我想删除Cell D3 if Cell B4 = FALSE的内容。如果Cell B4 = TRUE则不做任何事情。这就是我写的

    Range("b3:b4").Calculate
    Range("B4").Select
    If Range = False Then
        Range("D3").Select
        cell.ClearContents
    End If
    End If
End Sub

我在开始时有计算,因为我将工作表设置为手动计算,因为我不想重新计算所有内容。

我写的是什么?

3 个答案:

答案 0 :(得分:1)

试试这个

Sub Demo()
    Application.Calculation = xlCalculationAutomatic 'set calculation mode to automatic
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet2")  'change Sheet2 to your data sheet

    'check condition for B4=FALSE
    If Not ws.Range("B4") Then ws.Range("D3").ClearContents
    Application.Calculation = xlCalculationManual   'set calculation mode to manual
End Sub

注意:应避免使用SELECT。有关详细信息,请参阅this

编辑: 正如@Slai在下面的评论中指出的那样,如果If Not ws.Range("B4")的文字是TRUE,则Range("B4")会返回False 0TRUE(空白)。因此,您必须确保在FLASE中仅输入Cell B4IF,否则在代码中添加另一个BOOLEAN条件,以检查输入的值是否为{{ 1}}或不。因此将上面的代码更新为

Sub Demo()
    Application.Calculation = xlCalculationAutomatic 'set calculation mode to automatic
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet2")  'change Sheet2 to your data sheet

    If VarType(ws.Range("B4")) = vbBoolean Then 'check whether the cell value is boolean
        'check condition for B4=FALSE
        If Not ws.Range("B4") Then ws.Range("D3").ClearContents
    End If
    Application.Calculation = xlCalculationManual   'set calculation mode to manual
End Sub

答案 1 :(得分:0)

您可以尝试使用Mrig的代码。但是,我想您可能想知道您的代码是如何工作的。我认为问题在于:

1)如果Range = False那么 - >请将其更改为:如果Selection = False则

2)cell.ClearContents - >请将其更改为:Selection.ClearContents

3)删除最后一个"结束if",因为它过多。

答案 2 :(得分:0)

Mrig 已经为您提供了一个解决方案,但是为了帮助您将来您应该知道范围的默认属性是“值”,因此您可以(如同Mrig)直接测试它。 (即如果不是ws.Range(“B4”)“如果不是ws.Range(”B4“)相同。值”)。此外,在访问其方法之前无需选择范围/单元格,因此您可以执行“范围(”D3“)。ClearContents ”而无需先选择单元格,只要您没有其他理由选择或激活范围。

Ps单元格中的值(除非另有说明,“选项比较文本”或转换单元格值)在测试时区分大小写,因此对范围使用相同的一致大写也是一种好习惯,也有助于读取代码。