Слово 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", конечно, немного странная, но для достижения прогресса, возможно, не понадобится разбираться с этой проблемой. на форме.