Как получить разницу в количестве дней в Excel VBA? - PullRequest
0 голосов
/ 18 марта 2011

В настоящее время я работаю над проектом библиотечной системы, использующей Excel VBA, и мне нужен модуль, который проверяет просроченные книги, а также рассчитывает штрафы, наложенные на пользователя, у которого просроченная книга.

Это код, который у меня есть, и он, очевидно, не работает.

Dim fine, count, count2 As Integer
Dim currentdate, borroweddate, difference As String


'this is the amount of fine imposed per day (50 cents)
fine = 1 / 2

'gets number of borrowing records
count = Sheets("borrowing records").Range("K1").Value

'count2 is just a counter for the cells
count2 = 2

'gets the current date
currentdate = Now()


While (count2 < count + 2)
    If (Sheets("borrowing records").Cells(count2, 8).Value = "ON LOAN") Then
        difference = currentdate - Sheets("borrowing records").Cells(count2, 4).Value

        If (difference > 20) Then
            'prints the overdue record
            Sheets("display").Cells(count2, 1).Value = Sheets("borrowing records").Cells(count2, 1).Value
            Sheets("display").Cells(count2, 2).Value = Sheets("borrowing records").Cells(count2, 2).Value
            Sheets("display").Cells(count2, 3).Value = Sheets("borrowing records").Cells(count2, 3).Value
            Sheets("display").Cells(count2, 4).Value = Sheets("borrowing records").Cells(count2, 4).Value
            Sheets("display").Cells(count2, 5).Value = difference * fine
        End If

    Else
        count2 = count2 + 1

    End If
Wend

Sheets("display").Select

Когда я попытался запустить подобный код для проверки значения разности, я получил случайные числа с очень длинными десятичными знаками.Я не знаю почему.Результаты, которые я получил, даже не приблизились к реальной разнице в днях.Например, если я проверю разницу в днях между 20 марта и 1 марта, я получу что-то вроде 4.35648920486E32E, и да, в результате всегда будет буква "E".

Мое первоначальное намерениебыл для кодирования для поиска по листу («записи заимствования»), где программа хранит записи книг, взятых в долг.

Программа будет сравнивать дату заимствования книги и текущую дату, чтобыПосмотрите, увеличен ли лимит в 20 дней.

Если это так, он рассчитает штраф, умножив разницу в дате на сумму штрафа в день (в данном случае его 50 центов).Затем программа должна распечатать просроченные записи, а также наложенный штраф, на другом листе («дисплей»).

Я знаю, что программа не будет работать, возможно, из-за формата даты иличто-то в этом роде.Однако я понятия не имею, как это решить.

Мой проект должен быть в понедельник, и я просто надеюсь, что кто-то, читающий это, поможет мне в этом.Спасибо!

Ответы [ 2 ]

2 голосов
/ 18 марта 2011

Так как у нас слишком много цепочек комментариев. Я думал, что я начну новый ответ:

Для разницы дат используйте функцию DateDiff, например:

difference = DateDiff("d", currentdate, Sheets("borrowing records").Cells(count2, 4).Value, vbMonday)

, где "d" представляет разницу, указанную в количестве дней, а vbMonday сообщает системе, что наша неделя начинается в понедельник (думаю, по умолчанию это воскресенье - сомнение относится к вам прямо сейчас, но помните, что будущее использование)

Это даст вам простое количество дней ответа, которое вы и получите. Умножьте его на свое плавающее значение, и я думаю, что это все, что вам нужно для решения текущей проблемы. Нет необходимости проходить форматирование даты, так как результатом будет просто обычное число.

0 голосов
/ 18 марта 2011
Dim fine, count, count2 As Integer
Dim currentdate, borroweddate, difference As String

'this is the amount of fine imposed per day (50 cents)
fine = 1 / 2   ' integers don't do floating point!

Вы смотрели на значение fine?Я думаю, вы можете обнаружить, что вы недооцениваете своих просроченных заемщиков; -)

Что здесь происходит?

difference = currentdate - Sheets("borrowing records").Cells(count2, 4).Value

Попробуйте добавить строку, чтобы увидеть, получаете ли вы ответвы ожидаете, что-то вроде

difference = currentdate - Sheets("borrowing records").Cells(count2, 4).Value
Debug.Print currentdate, Sheets("borrowing records").Cells(count2, 4).Value, difference
...