Vba 息票日期与结算日期相同

Vba 息票日期与结算日期相同,vba,coupon,Vba,Coupon,Excel中有一个优惠券函数,给出下一张优惠券的日期(coupncd),但该日期与到期日相同(到期日为2020年2月15日,因此下一张优惠券的日期应为2019年2月15日)。然而,我想要的是相反的,因为息票的日期与结算日期是同一天 我试图创建此代码,但不起作用。我将感谢你的帮助 Function coupdate(settlement As Date, maturity As Date, frequency As Integer) As Date Dim today As Date Dim n

Excel中有一个优惠券函数,给出下一张优惠券的日期(coupncd),但该日期与到期日相同(到期日为2020年2月15日,因此下一张优惠券的日期应为2019年2月15日)。然而,我想要的是相反的,因为息票的日期与结算日期是同一天

我试图创建此代码,但不起作用。我将感谢你的帮助

Function coupdate(settlement As Date, maturity As Date, frequency As Integer) As Date

Dim today As Date
Dim n As Integer
Dim newdate As Date
today = Now()
n = Application.WorksheetFunction.Round((today - settlement) / 364, 0)
i = n
j = Application.WorksheetFunction.Round((maturity - today) / 364, 0)
For i = n To j
newdate = DateAdd("m", ((i * 12) + frequency), settlement)
i = i + (frequency / 12)
Next i
coupdate = newdate

End Function           

第一个基本问题,这是什么<代码>作为日期其次,它不起作用了吗?函数耦合日期作为日期:它用于函数,它将是一个日期。至于什么不起作用,我在I=n到j之后尝试了Msgbox I,当我启动代码时,它没有显示任何内容,这意味着vba无法识别j。因此,问题在于i=n到jIf如果j变量不起作用,很可能是因为成熟度变量没有正确地传递给函数。例如,一个日期的空变量可能会给您12:00AM,看看您是否可以验证该变量是否正确传递。我检查了,当我在j之后使用msgbox时,j是正确的,它显示了正确的一个,所以我不明白为什么它在“For”中不起作用