我有一个有效的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
答案 0 :(得分:0)
ActiveSheet.Range("AQ" & Index).Value = Sumact
ActiveSheet.Range("AQ" & Index).Value = earningsDue
看起来他们都写到这个单元格。您是否确定在“L”情况下,应收收入不是空白并覆盖您的sumact值?如果第一行也运行,看起来没有任何条件会阻止第二行运行。