VBA:在If Else循环中使用和声明

对于列K(第5行到最后一行)中同一行的G列中的值为0,同一行中的第I列中的值为零的所有单元格,macros应自动填充单词“Paid ”。

对于所有其他情况,macros应自动填充“付款尚未处理”短语。 我的代码是在下面,但我不断收到错误消息在If语句的开始。 任何帮助深表感谢。 谢谢

Sub Amount() Dim Lastrow As Long Dim i As Long Lastrow = Cells(Rows.Count, "C").End(xlUp).Row For i = 5 To Lastrow If ActiveSheet.Range("I" & i).Value <> " " And _ ActiveSheet.Range("G" & i).Value = 0 Then ActiveSheet.Range("K" & i).Value = "Paid" Else ActiveSheet.Range("K" & i).Value = "Processed Not Yet Paid" End If Next i End Sub 

在比较string之前,您需要检查错误:

 Sub Amount() Dim Lastrow As Long Dim i As Long With ActiveSheet Lastrow = .Cells(.Rows.Count, "C").End(xlUp).Row For i = 5 To Lastrow If IsError(.Range("I" & i).Value) Or IsError(.Range("G" & i).Value) Then .Range("K" & i).Value = "Processed Not Yet Paid" ElseIf .Range("I" & i).Value <> " " And _ .Range("G" & i).Value = 0 Then .Range("K" & i).Value = "Paid" Else .Range("K" & i).Value = "Processed Not Yet Paid" End If Next i End With End Sub 

注意:如果单元格包含单个空格,则对<> " "的testing将仅为False 。 因此,对于该testing,空单元格将返回True 。 我不确定这是否是你想要的。

捕捉错误可能会让新用户感到困惑。 这里有另外一种使用非vba函数的方法,Excel用户可能很熟悉–CountIf 。 这将防止任何错误值/文本/#NA / DiV / 0?OH / NO !. 本质上是一些真实或其他东西的真正考验。

OP – 请注意,你的代码中有一个“”(包括一个空格),如果你的意思是空白的话,我猜可能需要这个“”。

 Sub Amount() Dim WS As Worksheet 'Just a suggestion to keep more dynamic Set WS = ActiveSheet 'Just a suggestion to keep more dynamic Dim Lastrow As Long, i As Long Lastrow = WS.Cells(Rows.Count, "C").End(xlUp).Row For i = 5 To Lastrow If Application.WorksheetFunction.CountIf(WS.Range("I" & i), " ") = 0 And _ Application.WorksheetFunction.CountIf(WS.Range("G" & i), 0) = 1 Then WS.Range("K" & i).Value = "Paid" Else WS.Range("K" & i).Value = "Processed Not Yet Paid" End If Next i End Sub