如果值为零或为空,Excel VBA代码将停止

如果值为零或为空,Excel VBA代码将停止,vba,excel,Vba,Excel,代码运行不准确,公式为: F(单元)=G(单元)-A2仅当F(单元)>0时 当代码运行并在F单元格中找到任何“空白”或“0”值时,代码停止工作,尽管下一个F单元格可能有正值。关键是,如果下一个单元格的值为正值,我们需要代码继续工作 更好地解释的屏幕截图 正确的结果应该在屏幕截图下面考虑代码工作。 实际上,当您试图根据F列的值填充G列时,只需要一行代码 在下面的示例代码中,您只需要在主子例程中调用sub-PopulateColumnG 主子程序: Private Sub Button_Click

代码运行不准确,公式为:

F(单元)=G(单元)-A2仅当F(单元)>0时

当代码运行并在F单元格中找到任何“空白”或“0”值时,代码停止工作,尽管下一个F单元格可能有正值。关键是,如果下一个单元格的值为正值,我们需要代码继续工作

更好地解释的屏幕截图

正确的结果应该在屏幕截图下面考虑代码工作。


实际上,当您试图根据F列的值填充G列时,只需要一行代码

在下面的示例代码中,您只需要在主子例程中调用sub-PopulateColumnG

主子程序:

Private Sub Button_Click()

    With Application
        .Calculation = xlCalculationManual
        .EnableEvents = False
        .ScreenUpdating = False
    End With

    Call PopulateColumnG

    'Rest of your code


    With Application
        .Calculation = xlCalculationAutomatic
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub
Sub PopulateColumnG()
    Dim lr As Long
    lr = Cells(Rows.Count, 6).End(xlUp).Row
    Range("G1:G" & lr).Formula = "=IF(F1>0,F1-$A$2,"""")"
    Range("G1:G" & lr).Value = Range("G1:G" & lr).Value
End Sub
填充G列所需的代码:

Private Sub Button_Click()

    With Application
        .Calculation = xlCalculationManual
        .EnableEvents = False
        .ScreenUpdating = False
    End With

    Call PopulateColumnG

    'Rest of your code


    With Application
        .Calculation = xlCalculationAutomatic
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub
Sub PopulateColumnG()
    Dim lr As Long
    lr = Cells(Rows.Count, 6).End(xlUp).Row
    Range("G1:G" & lr).Formula = "=IF(F1>0,F1-$A$2,"""")"
    Range("G1:G" & lr).Value = Range("G1:G" & lr).Value
End Sub

你使用&我认为你的意思是&和是字符串连接运算符。和是布尔运算符。您还缺少和
End If
。您有
If/Else/If/If
。您需要
If/Else/End If/If/End If/If/End If
现在的方式。您的代码是否正确编译,或者如果,您是否省略了最后的
结尾?我知道连接,并且使用了,但是&但是我没有得到准确的结果。@BruceWayne这是代码的一部分,是的,它正确编译,但是没有得到准确的结果。我们可以看到您代码的其余部分吗?这看起来有点复杂/过分,好像是
=IF(AND(F1>0,F1“”),F1-$a$2,“”)
谢谢你的回答,但是我不确定这正是我要找的,如果你查看发布的代码,你可以看到我在这个按钮中调用了多个sub,并请求编译特定的公式以获得结果,如果没有弄错的话,”.ScreenUpdating=True”是一个模拟集,因为一旦代码完成,它无论如何都会启动。