VBA:在If Else循环中使用And语句

时间:2017-10-09 20:02:46

标签: excel vba excel-vba

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

对于所有其他情况,宏应自动填写短语“付费未处理”。我的代码如下,但我在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

2 个答案:

答案 0 :(得分:0)

在与字符串等进行比较之前,您需要检查错误:

<> " "

注意:如果单元格包含单个空格,则False的测试仅为True。因此,空单元格将返回var xVals = Value.CreateSequence<float>(new int[] { 2 }, new float[] { 1, 2, 3, 4, 5, 6 }, DeviceDescriptor.CPUDevice); 进行该测试。我不确定这是不是你想要的。

答案 1 :(得分:0)

错误捕获可能会让新用户感到困惑。这是另一种使用非vba Excel用户可能熟悉的功能的方法 - CountIf 。这将抵御任何错误值/文本/ #NA / DiV / 0?OH / NO!。基本上是对某些值为true或其他值的真实测试。

OP - 请注意,您有一个&#34; &#34;在你的代码中(包括一个空格),我猜测可能需要&#34;&#34;如果你的意思是空白。

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