VBA DateAdd Неверный формат выходов - PullRequest
1 голос
/ 25 марта 2019

Я пытаюсь добавить один месяц к дате, отформатированной как 30.11.2008, с использованием функции DateAdd, но независимо от того, какая дата введена, выдается 12:00:00 AM

Диапазоны для oneCell и twoCell указаны в формате «Дата» на листе Excel

 For Each aWorksheet In ActiveWorkbook.Worksheets
    If Left(aWorksheet.Name, 1) = "#" Then
        siteNum = Trim(Right(Left(aWorksheet.Name, 5), 4))

        Set oneCell = aWorksheet.Range("C:C").Find("2018")
        Set twoCell = aWorksheet.Range("D:D").Find("2018")

        If oneCell.Row > twoCell.Row Then
            Set oneCell = oneCell.Offset(-1, 0)
        End If

        Do While oneCell.Value <> ""

            billMonthDate = GetBillMonth(oneCell.Value, twoCell.Value)

Затем вызывается функция:

Public Function GetBillMonth(ByVal startDate As Date, ByVal endDate As Date) As Date
Dim billMonth As Date
Dim startMonthDays As Integer
Dim endMonthDays As Integer

If DateDiff("m", startDate, endDate) > 1 Then
    billMonth = DateTime.DateAdd("m", 1, startDate)

Else
    startMonthDays = DateDiff("d", startDate, DateSerial(Year(startDate), Month(startDate) + 1, -1))
    endMonthDays = Day(endDate)

    If startMonthDays > endMonthDays Then
        billMonth = oneCellDate
    ElseIf startMonthDays < endMonthDays Then
        billMonth = endDate
    Else
        'fuck me
    End If
End If

GetBillMonth = billMonth

End Function

Редактировать: дата начала поступает из электронной таблицыЯ анализируюМакрос перебирает и просматривает множество дат, поэтому я не могу просто добавить дату последовательно, чтобы решить эту проблему.Мне просто нужно dateadd для работы

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Вот обходной путь для всех, кто заинтересован:

    If Month(startDate) + 1 > 12 Then
        billMonth = DateSerial(Year(startDate) + 1, 1, 1)
    Else
        billMonth = DateSerial(Year(startDate), Month(startDate) + 1, 1)
    End If
0 голосов
/ 25 марта 2019

Всегда используйте реальные значения даты, не используйте строки, похожие на даты.

Sub AddOneMonth()  
    Dim StartDate As Date
    StartDate = DateSerial(2018, 11, 30)

    Dim BillMonth As Date
    BillMonth = DateAdd("m", 1, StartDate)

    Debug.Print BillMonth   '2018-12-30  
End Sub

При работе с ячейками ...

Sub AddOneMonth()  
    Dim StartDate As Date
    StartDate = ThisWorkbook.Worksheets("Sheet1").Range("A1").Value

    Dim BillMonth As Date
    BillMonth = DateAdd("m", 1, StartDate)

    ThisWorkbook.Worksheets("Sheet1").Range("A2").Value = BillMonth
    ThisWorkbook.Worksheets("Sheet1").Range("A2").NumberFormat = "MM/dd/yyyy"
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...