根据在文本框中输入的日期计算月数

时间:2018-09-29 18:17:57

标签: excel vba excel-vba

我有一个用户窗体,其中有三个文本框。 Textbox1属于开始日期 Textbox2属于结束日期 Textbox3属于“月份”。

下面是我的代码。

Dim mon As Integer

'Check Whether the Start Date Text Box is Empty or Not
If IsNull(Me.TextBox1.Text) = True Then
Me.TextBox3.Value = ""

Else
Me.TextBox2.Value = Format(DateAdd("yyyy", 1, Me.TextBox1.Value) - 1, "dd-mmm-yyyy")

mon = DateDiff("m", Me.TextBox1, Me.TextBox2)
Me.TextBox3.Value = mon

End If

上面的代码计算结束日期和编号。个月。问题是当我输入任何月份的第1个日期时,它仅显示11个月。但是,如果我输入除1日以外的任何其他日期,则显示为12个月。

如果我输入任何月份的第1个日期,请告诉我如何获得12个月。

谢谢 萨尔曼(Salman)

1 个答案:

答案 0 :(得分:0)

好吧,我测试了这段代码,效果很好:

Sub Test()

Dim mon As Integer

'Check Whether the Start Date Text Box is Empty or Not
If IsNull(Cells(4, 3).Text) = True Then
Cells(5, 3).Value = ""

Else
Cells(4, 4).Value = DateAdd("yyyy", 1, Cells(4, 3).Value - 1)
Cells(4, 4).NumberFormat = "d-mmm-yyyy"

mon = DateDiff("m", Cells(4, 3), Cells(4, 4) + 1)
Cells(5, 3).Value = mon

End If


End Sub

使用Format函数时,我不能只在DateDiff中添加1天。我猜这是因为您不能在字符串中加1。

Sub Test2()
Dim xDate As Long
Dim xNewDate As Long

xDate = 40179  'It is 01.01.2010
xNewDate = DateAdd("yyyy", 1, xDate - 1)

xDateFormat = Format(xDate, "dd-mmm-yyyy")
xNewDateFormat = Format(xNewDate, "dd-mmm-yyyy")


MsgBox DateDiff("m", xDate, xNewDate + 1)

Debug.Print xDate
Debug.Print Format(xDate, "dd-mmm-yyyy")
Debug.Print xNewDate
Debug.Print Format(xNewDate, "dd-mmm-yyyy")

Debug.Print ""

'Debug.Print CLng(xDateFormat)                                                                 'Type Mismatch
'Debug.Print CLng(xNewDateFormat)                                                              'Type Mismatch
Debug.Print DateDiff("m", xDateFormat, xNewDateFormat)                                         'It works so DateDiff converts it
Debug.Print DateDiff("m", DateDiff("d", 0, xDateFormat), DateDiff("d", 0, xNewDateFormat) + 1) 'Now you can add one day


End Sub

我希望这段代码可以工作:

Dim mon As Integer

'Check Whether the Start Date Text Box is Empty or Not
If IsNull(Me.TextBox1.Text) = True Then
Me.TextBox3.Value = ""

Else
Me.TextBox2.Value = Format(DateAdd("yyyy", 1, Me.TextBox1.Value) - 1, "dd-mmm-yyyy")

mon = DateDiff("m", Me.TextBox1, Me.TextBox2)
mon = DateDiff("m", DateDiff("d", 0, Me.TextBox1), DateDiff("d", 0, Me.TextBox2) + 1)
Me.TextBox3.Value = mon

End If