Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel vba用于在另一个单元格=FALSE时删除单元格内容_Excel_Vba - Fatal编程技术网

Excel vba用于在另一个单元格=FALSE时删除单元格内容

Excel vba用于在另一个单元格=FALSE时删除单元格内容,excel,vba,Excel,Vba,嗨,我是VBA和宏的新手。如果单元格B4=FALSE,我正试图删除单元格D3的内容。如果单元格B4=TRUE,则不执行任何操作。这是我写的 Range("b3:b4").Calculate Range("B4").Select If Range = False Then Range("D3").Select cell.ClearContents End If End If End Sub 我在开始时进行了计算,因为我将工作

嗨,我是VBA和宏的新手。如果
单元格B4=FALSE
,我正试图删除
单元格D3
的内容。如果
单元格B4=TRUE
,则不执行任何操作。这是我写的

    Range("b3:b4").Calculate
    Range("B4").Select
    If Range = False Then
        Range("D3").Select
        cell.ClearContents
    End If
    End If
End Sub
我在开始时进行了计算,因为我将工作表设置为手动计算,因为我不希望所有内容都重新计算

我写的东西太离谱了吗?

试试这个

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
。有关详细信息,请参阅

EDIT:正如@Slai在下面的评论中指出的那样,
如果不是ws.Range(“B4”)
则返回
TRUE
,如果
Range(“B4”)
的文本为
False
0
(空白)。因此,您必须确保在
单元格B4
中只输入
TRUE
FLASE
,否则在code中添加另一个
IF
条件,以检查输入的值是否为
布尔值。因此,将上述代码更新为

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

你可以试试Mrig的代码。然而,我认为您可能想知道您的代码是如何工作的。我认为问题在于:

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

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


3) 删除最后一个“如果结束”,因为它太多了。

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


测试时,单元格中的p.s值(除非另有说明,带有“Option Compare Text”(选项比较文本)或转换单元格值)区分大小写,因此最好使用与范围相同的大小写,这也有助于读取代码。

应避免使用
SELECT
。谢谢你告诉我我自己的代码哪里错了。学习这些东西比复制和粘贴其他人的作品更好。
如果[B4]=False,那么[D3]=“如果ws.Range(“B4”)=False,那么可能更好,因为
ws.Range(“B4”)
如果为0或Empty@Slai-谢谢你指出这一点,但是如果我没有错
如果ws.Range(“B4”)=False,那么
也将是
TRUE
如果
ws.Range(“B4”)=0
,那么应该使用
ws.Range(“B4”)=“False”
。@Nina-请参见答案中的编辑。对不起,我把它复杂化了:]我非常确定
0=False
=False
会导致False,但是没有Excel来测试它。@Slai-即使我没有检查它是否有空格和0。事实上,你的评论帮助我从另一个角度来研究它,所以谢谢。)谢谢你的帮助。它工作得很好,就像我想要的那样。