Моя функция всегда неправильно читает дату ровно на 1 год - PullRequest
0 голосов
/ 22 января 2019

У меня есть даты, хранящиеся в строках, иногда в форме «ноябрь-2018», а иногда в форме «01.11.2008».Я хочу изменить их повсеместно на «ноябрь 2018».Только месяц и дата.

Я написал следующую функцию.

Function FnDateExtract(fnFile, fnTab, fnRow, fnColumn)
    Dim RawExtract As String
    With Workbooks(fnFile).Worksheets(fnTab)
        RawExtract = .Cells(fnRow, fnColumn).Text
        FnDateExtract = Format(RawExtract, "mmm yyyy")
    End With
End Function

Я продолжаю сталкиваться с этой проблемой, когда функция будет читать строки '11 / 1/2018 'и' Nov-2018и вернуть результат «Ноябрь 2019».Я понятия не имею, почему 2019 год (но проблема появилась только с 1 января 2019 года. Как странно.)

Вопрос: Как временное решение, есть ли способ вернуть годминус 1?Что-то похожее на FnDateExtract = Format (RawExtract, "mmm yyyy - 1 ")?

Если бы вы могли помочь мне решить проблему, почему функция всегда неправильно читает строки ровно на 1 год, это 'Я также очень помог бы.Спасибо!

Редактировать RonRosenfeld ниже предположил, что функция будет извлекать только текущий год.Я сделал несколько тестов, и кажется, что он также извлечет 2017 год как 2019. Не уверен, почему это так.Все еще ищу решение.

1 Ответ

0 голосов
/ 22 января 2019

Используйте проверку IsDate в сочетании с преобразованием CDate для получения правильной строки, представляющей дату.

Option Explicit

Function FnDateExtract(fnFile As String, fnTab As String, fnRow As Long, fnColumn As Variant)
    With Workbooks(fnFile).Worksheets(fnTab)
        If IsDate(.Cells(fnRow, fnColumn).Text) Then
            FnDateExtract = Format(CDate(.Cells(fnRow, fnColumn).Text), "mmm yyyy")
        End If
    End With
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...