Рассчитать количество месяцев на основе дат, введенных в текстовые поля - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть пользовательская форма, в которой есть три текстовых поля.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 месяцев.

Пожалуйста, сообщите мне, как я могу получить 12 месяцев, если я введу 1-ю дату любого месяца.

Спасибо Салман

1 Ответ

0 голосов
/ 30 сентября 2018

Ну, я протестировал этот код, и он хорошо работает:

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

Когда использовалась функция Формат, я не мог просто добавить 1 день в DateDiff.Я думаю, это потому, что вы не можете добавить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...