Как проверить, больше ли одна дата, чем другая? - PullRequest
0 голосов
/ 12 апреля 2019

Мне нужно отследить срок годности материалов. Для этого мне нужно найти определенный временной интервал (например, 80 дней до и 40 дней спустя с сегодняшнего дня).

Сначала я установил сегодняшнюю дату в формате дд / мм / гггг. Затем возьмите два ввода от пользователя, так что первый должен определить дату после сегодняшнего дня (скажем, х), а второй - сколько дней до сегодняшнего дня (скажем, у).

Теперь мне нужно сравнить сегодня + x и сегодня - y дату с датой истечения срока годности материалов. Однако я застрял.

Я определяю тыл и далее как переменные inputBox. Значение, введенное в задний угол, будет присвоено переменной x и даст «задние» дни до сегодняшнего дня, а значение, введенное для дальнейшего, будет присвоено переменной y и перенесет нас на «дальнейшие» дни после.

Здесь я идентифицирую сегодняшнюю дату (ячейка "G1") и временной интервал с датами x и y

Public Sub date()

Dim DateToProcess As Date

DateToProcess = Date

BUBD.Cells.Range("G1") = DateToProcess

rear = InputBox("How many days do you want to trace back?")
x = DateAdd("d", -rear, CDate(Range("G1")))


further = InputBox("How many days after do you want to check?")
y = DateAdd("d", further, CDate(Range("G1")))

End Sub

Тогда я хочу сравнить материалы BUBD с x и y

If rngRisk(j) > x Or rngRisk(j) < y 

Когда я сравниваю x и y с датами истечения срока в столбце rngRisk, все значения вставляются независимо от нахождения в интервале

Как сравнить даты истечения срока годности материалов с x и y?

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Если я правильно понял, ваш код не может сравнивать даты.

Я предполагаю, что rngRisk (j) - это ячейка Excel, в этом случае может произойти то, что тип данных в ячейке имеет неправильный формат. Если ячейка отформатирована как Date, вы можете сделать rngRisk (j) .Value2. Он должен возвращать дату или количество дней с 1900 года до указанной даты.

OBS: x и y должны быть датой или длинным типом для сравнения дат

если ячейка в формате даты

If rngRisk(j).Value2 > x

если ячейка в текстовом формате

If CDate(rngRisk(j).Value2) > x

Изменить:

Пример для сравнения дат

Sub CompareDates()

Dim rngDates As Range
Dim initialDate As Date
Dim finalDate As Date
Dim dateInColumn As Variant

initialDate = Date ' today
finalDate = Date + 3 ' 3 days from now

Set rngDates = ActiveSheet.Range("b2:b21") ' range with dates

For Each dateInColumn In rngDates

    If dateInColumn.Value2 > initialDate And dateInColumn.Value2 < finalDate Then

        MsgBox CDate(dateInColumn.Value2) & " is in between " & initialDate & " and " & finalDate

    End If

Next

End Sub

0 голосов
/ 12 апреля 2019

Добро пожаловать!

Во-первых, всегда используйте Option Explicit в самом верху вашего кода перед вашим Subs. Это заставит вас объявлять переменные, что избавит вас от ошибок, связанных с типами данных.

Во-вторых, x, y и rngRisk должны быть объявлены как date, чтобы их можно было надежно сравнить с датой.

Наконец, вы можете просто добавить целые числа к переменной, объявленной как дата, например

dim tomorrow as date
tomorrow = Date + 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...