Excel vba用于在另一个单元格=FALSE时删除单元格内容
嗨,我是VBA和宏的新手。如果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 我在开始时进行了计算,因为我将工作
单元格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。事实上,你的评论帮助我从另一个角度来研究它,所以谢谢。)谢谢你的帮助。它工作得很好,就像我想要的那样。