我有一个用户窗体,其中有三个文本框。 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)
答案 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