楼主在命令窗口测试一下这段代码看看结果是你要的么:
Dim dr As DataRow
dr = DataTables("宗地合同信息").Find("宗地编号='" & Tables("宗地交款信息").Current("宗地编号") & "' and 合同号 = '" & Tables("宗地交款信息").Current("合同号") & "'")
Dim t1,t2,t3,t4 As Date
t1 = dr("缴款日期1")
t2 = dr("缴款日期2")
t3 = dr("缴款日期3")
t4 = dr("缴款日期4")
Dim z,z1,z2,z3,z4 As Double
z1 = dr("缴款金额1")
z2 = dr("缴款金额2")
z3 = dr("缴款金额3")
z4 = dr("缴款金额4")
Dim td1,td2,td3,td4 As TimeSpan
For i As Integer = 0 To Tables("宗地交款信息").count - 1
Tables("宗地交款信息").rows(i)("应交滞纳金") = 0
Dim tj As Date = Tables("宗地交款信息").rows(i)("缴款日期")
Dim Sum,Sum2,Sumd1 As Double
If Tables("宗地交款信息").rows(i)("缴款金额") = 0
Tables("宗地交款信息").rows(i)("应交滞纳金") = 0
Else
If tj <= t1
Tables("宗地交款信息").rows(i)("应交滞纳金") = 0
Else
Sum = DataTables("宗地交款信息").Compute("Sum(缴款金额)", "缴款日期 <= '" & tj & "'")
Sum2 = DataTables("宗地交款信息").Compute("Sum(缴款金额)", "缴款日期 < '" & tj & "'")
If Sum <= z1
Sumd1 = z1 - Sum2
td1 = tj - t1
Tables("宗地交款信息").rows(i)("应交滞纳金") = Sumd1 * 0.001 * td1.days
Elseif Sum > z1 AndAlso Sum <= z1+z2
If z1 - Sum2 > 0
Sumd1 = z1 - Sum2
td1 = tj - t1
td2 = tj - t2
If td2.days > 0
Tables("宗地交款信息").rows(i)("应交滞纳金") = Sumd1 * 0.001 * td1.days + (Sum-z1) * 0.001 * td2.days
Else
Tables("宗地交款信息").rows(i)("应交滞纳金") = Sumd1 * 0.001 * td1.days
End If
Else
If z1+z2 >= Sum
Sumd1 = Sum - Sum2
td1 = tj - t2
Tables("宗地交款信息").rows(i)("应交滞纳金") = Sumd1 * 0.001 * td1.days
End If
End If
'-----------------------------
Elseif Sum > z1+z2 AndAlso Sum <= z1+z2+z3 '当累计缴款金额 > 约定金额1+2时
If z1+z2 - Sum2 > 0 '约定金额1+2大于本次缴款之前的累计时
Sumd1 = z1+z2 - Sum2
td1 = tj - t2
td2 = tj - t3
If td2.days > 0
Tables("宗地交款信息").rows(i)("应交滞纳金") = sumd1 * 0.001 * td1.days + (Sum-z1-z2)*0.001*td2.days
Else
Tables("宗地交款信息").rows(i)("应交滞纳金") = sumd1 * 0.001 * td1.days
End If
Else
If z1+z2+z3 >= Sum
Sumd1 = Sum - Sum2
td3 = tj - t3
Tables("宗地交款信息").rows(i)("应交滞纳金") = Sumd1 * 0.001 * td3.days
End If
End If
Elseif Sum > z1+z2+z3 AndAlso Sum <= z1+z2+z3+z4
If z1+z2+z3 - Sum2 > 0
Sumd1 = z1+z2+z3 - Sum2
td1 = tj - t3
td2 = tj - t4
If td2.days > 0
Tables("宗地交款信息").rows(i)("应交滞纳金") = sumd1 * 0.001 * td1.days + (Sum-z1-z2-z3)*0.001*td2.days
Else
Tables("宗地交款信息").rows(i)("应交滞纳金") = sumd1 * 0.001 * td1.days
End If
Else
If z1+z2+z3+z4 >= Sum
Sumd1 = Sum - Sum2
If Sumd1 > 0 '最后多缴款退回时会出现负数的滞纳金,所以加此判断···
td3 = tj - t4
If td3.days > 0
Tables("宗地交款信息").rows(i)("应交滞纳金") = Sumd1 * 0.001 * td3.days
Else
Tables("宗地交款信息").rows(i)("应交滞纳金") = 0
End If
End If
End If
'-------------------------------------------
End If
Elseif Sum > z1+z2+z3+z4
messagebox.show("谢谢,多交了" & Sum - (z1+z2+z3+z4) & "元", "** ^_^ **")
End If
End If
End If
Next