Слово vba дата переполнения

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

Я получаю очень простую ошибку в макросе, где следующий код приводит к ошибке 6: переполнение:

dim invDate as Date, dueDate as Date
dim days as Integer
dim invDateFF as Formfield, dueDateFF as Formfield, daysFF as Formfield

set invDateFF = Activedocument.Formfields("Date")
set dueDateFF = Activedocument.Formfields("DueDate")
set daysFF = Activedocument.Formfields("Days")

invDate = Format(Now, "dd/MM/yyyy")
days = daysFF.Result
dueDate = DateAdd("d", days, invDate)
invDateFF.Result = invDate

Обе переменные (invDate и dueDate) переполняются...

Поля формы являются текстовыми полями формы и имеют тип даты. Есть ли что-то очевидное, чего мне не хватает?

Спасибо

1 ответ

Решение

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

invDate = Format(Now, "dd/MM/yyyy")

Проблема в том, что результатом "Format" является строка, но invDate имеет тип Date. Таким образом, вы полагаетесь на Word, чтобы привести дату в строковом формате к значению даты, что не является хорошей идеей в общем случае. Кроме того, я полагаю, что основная причина, по которой вы это делаете, состоит в том, чтобы избавиться от временной части результата функции "Сейчас". Если это так, вы можете использовать вместо этого свойство Date VBA.DateTime, например:

invDate = Date

или же

invDate = VBA.Date

Тогда следующие утверждения должны делать правильные вещи:

days = daysFF.Result
dueDate = DateAdd("d", days, invDate)

Но теперь, что вы, вероятно, хотите, это вставить результат обратно в вашу форму, что потребует

dueDateFF.Result = format(dueDate,"DD/MM/YYYY")

и / или вы можете использовать свойства FormField для установки формата даты на тот, который вы хотите видеть (и быть принятым - Word имеет некоторую гибкость в этой области).

Лично я бы постарался сосредоточиться на том, чтобы заставить код делать то, что я хотел - проблема, которую вы описываете с помощью значения переменной "days", конечно, немного странная, но для достижения прогресса, возможно, не понадобится разбираться с этой проблемой. на форме.

Другие вопросы по тегам