Excel VBA sumif

时间:2016-12-22 20:53:59

标签: excel vba excel-vba

我有一个有效的VBA脚本,但我最近添加了一个新的IF语句,现在它不会发布sumif值。我试图让Lauren Comp部分在AQ列的相应行中填充IF语句的总和。

Sub CalculateCommission()
    Dim Index As Integer    'Row Index
    Dim employeeName As String 'A
    Dim compPlan As String  'B
    Dim baseWage As Double  'AM
    Dim commAN As Double 'AN
    Dim guarantee As Double 'AO
    Dim earningsDue As Double   'AQ
    Dim priorPay As Double 'AR from prior pay cycle
    Dim priorBase As Integer 'AS from prior pay cycle
    Dim newComm As Double   'AU
    Dim packBack As Double 'AP

    Index = 3

    Do While Len(ActiveSheet.Range("B" & Index))
        employeeName = UCase(ActiveSheet.Range("A" & Index))
        compPlan = UCase(ActiveSheet.Range("B" & Index))
        baseWage = ActiveSheet.Range("AM" & Index)
        newComm = ActiveSheet.Range("AU" & Index)
        earningsDue = ActiveSheet.Range("AQ" & Index)
        guarantee = ActiveSheet.Range("AO" & Index)
        packBack = ActiveSheet.Range("AP" & Index)

'set to zero if there's an error - based on prior pay cycle

        If (IsError(ActiveSheet.Range("AR" & Index)) = False) Then
            priorPay = ActiveSheet.Range("AR" & Index)
        Else
            priorPay = 0
        End If

        If (IsError(ActiveSheet.Range("AS" & Index)) = False) Then
            priorBase = ActiveSheet.Range("AS" & Index)
        Else
            priorBase = 0
        End If

        commAN = ActiveSheet.Range("AN" & Index)

'base plus commission,else

        If compPlan = "B" Or compPlan = "D" Or compPlan = "E" Or compPlan = "I" Or compPlan = "J" Or compPlan = "L" Then
                commAN = earningsDue - baseWage - guarantee - priorBase
            Else
                commAN = earningsDue - baseWage - guarantee
        End If

'Lauren comp

        If compPlan = "L" Then
                Sumact = Application.WorksheetFunction.SumIf(Worksheets("Calc by loan").Range("C:C"), "Doe, John", Worksheets("Calc by loan").Range("D:D"))
        End If
            ActiveSheet.Range("AQ" & Index).Value = Sumact

'base plus commission, else

        If compPlan = "B" Or compPlan = "D" Or compPlan = "E" Or compPlan = "I" Or compPlan = "J" Then
            If baseWage + newComm > baseWage Then
                earningsDue = baseWage + newComm + guarantee + priorBase - priorPay + packBack
            Else
                earningsDue = baseWage + guarantee + packBack
            End If
        Else
            If newComm > baseWage + priorPay Then
                earningsDue = newComm - priorPay + guarantee + packBack
            Else
                earningsDue = baseWage + guarantee + packBack
            End If
        End If
        ActiveSheet.Range("AQ" & Index).Value = earningsDue
        Index = Index + 1
    Loop
EndSub:
End Sub

1 个答案:

答案 0 :(得分:0)

ActiveSheet.Range("AQ" & Index).Value = Sumact
ActiveSheet.Range("AQ" & Index).Value = earningsDue

看起来他们都写到这个单元格。您是否确定在“L”情况下,应收收入不是空白并覆盖您的sumact值?如果第一行也运行,看起来没有任何条件会阻止第二行运行。