2016-05-07 20 views
0

私は請求書生成を自動化するマクロを作成しています。 1つのことは、請求書のフォームフィールドに今日の日付を割り当て、現在の日付に(フォームフィールドにユーザーによって挿入された)日数を今日の日付に加算することによって期日を計算することです。 「:オーバーフローエラー6」:私は次のコードは、に実行されるマクロに非常に基本的なエラーを取得していますword vba date overflow

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)があふれている...

フォームフィールドはテキストフォームフィールドで、日付タイプです。私が紛失していることは明らかですか?

おかげ

+0

コードはWord2013で私にとって役立ちます。あなたはフォーマットの代わりに日付を使うことができました(今、 "dd/MM/yyyy") – INOPIAE

+0

私はMac用のWord 2016です。コンピュータの言語設定と関係がありますか?つまり、コンピュータはスペイン語ですが、コードは英語で実行されています。多分、日付の書式が違う...?あなたは何を意味するのでしょうか?代わりに日付を使うことができますか? –

+0

daysFF.Resultの値は何ですか?今は分かっていないと、debug.print daysFF.Resultを使用してください。 – newguy

答えて

1

コメントメカニズムがあまりにも厄介なので、私は答えとしてこれを掲載しました。 すべてあなたが遭遇した問題は確かに答えではありませんが、それ以上の議論の基礎として使うことができます。

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

"Format"の結果は文字列ですが、invDateのDate型は問題です。したがって、文字列形式の日付を日付値に強制するためにWordに依存していますが、これは一般的なケースでは良い考えではありません。さらに、私はあなたがそれをやっている主な理由は、 "今"機能の結果の時間部分を取り除くことだと思います。その場合は、代わりにVBA.DateTimeのDateプロパティを使用できます。

invDate = Date 

または

invDate = VBA.Date 

その後、次の文は正しいことを行う必要があります。

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

をしかし、今、あなたはおそらく何をしたい戻ってあなたのフォームに結果をプラグインすることで、どのだろう必要性

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

FormFieldのプロパティを使用して、日付の形式を表示したい形式に設定することができます(受け入れられる - Wordはその領域に柔軟性があります)。

個人的には、私が望むことを行うためにコードを取得することに集中しようとしています。「日数」変数値で説明する問題は確かにちょっと変わっていますが、その問題の一番下に達することはフォーム上で進行を指示する。

+0

明確化のおかげで、それは確かにオーバーフローの問題に役立ちます。しかし、私はまだDateAdd関数が引数として "d"が与えられたときに何年もの間に何年も追加されるのか理解できません...ご存知ですか? thx –

+0

私が提案した変更を加えても、その動作に何か違いはありましたか? –

+1

@DNunez On Stack Overflow質問には1つの「質問」しかありません。 bibadiaのAnswerが "大きな"問題(オーバーフロー)を修正した場合(それはこのQuestionの主題です)、その隣にあるチェックボックスをクリックして "Answer"としてマークしてください。その後、あなたが持っているすべての情報を処理し、他の問題について新しい質問を投稿します。 ** NOTE **この記事のためにMacのタグを使ってMAC質問にタグを付けることを覚えておいてください:-) –