|
はじめまして。VBA初心者です。
Word2007を使って以下のフォームを作成しています。
ActiveXのコンボボックス(Reason)から「傷病」を選択した時、2つの日付選択コンテンツコントロールをアクティブにし、日付を入力してもらいます。
入力してもらった2つの日付データを取得し、その期間が7日以下、8日以上、30日以上、60日以上の場合、それぞれ給付される金額をActiveXのTextBoxに表示させます。
コードは以下の通りです。
Private Sub Reason_Change()
Dim 開始日 As Date
Dim 終了日 As Date
Dim amt As Long
If Reason.Value = "災害 - Disaster" Then
ThisDocument.ContentControls.Item(1).LockContents = False
ThisDocument.ContentControls.Item(2).LockContents = False
ThisDocument.ContentControls.Item(1).Range.Font.Color = wdColorWhite
ThisDocument.ContentControls.Item(2).Range.Font.Color = wdColorWhite
ThisDocument.ContentControls.Item(1).LockContents = True
ThisDocument.ContentControls.Item(2).LockContents = True
amt = 50000
ElseIf Reason.Value = "傷病 - Illness" Then
ThisDocument.ContentControls.Item(1).LockContents = False
ThisDocument.ContentControls.Item(2).LockContents = False
ThisDocument.ContentControls.Item(1).Range.Font.Color = wdColorGray70
ThisDocument.ContentControls.Item(2).Range.Font.Color = wdColorGray70
開始日 = DateValue(ThisDocument.ContentControls.Item(1).Range.Text)
終了日 = DateValue(ThisDocument.ContentControls.Item(2).Range.Text)
If DateDiff("d", 開始日, 終了日) >= 90 Then
amt = 10000
ElseIf DateDiff("d", 開始日, 終了日) >= 30 Then
amt = 5000
ElseIf DateDiff("d", 開始日, 終了日) >= 8 Then
amt = 3000
Else
MsgBox "休業期間が基準を満たしていません"
End If
End If
TextBox1.Value = amt
End Sub
様々な解説ページを参照しながらVBAを書いてみたのですが、エラーは出ないものの、問題が2点あります。
まず、1点目は、取得した2つの日付データの期間が正しく取得できていないのか、3ヶ月以上空いているにもかかわらず、「休業期間が基準を満たしていません」のメッセージが出ます(たとえば開始日9/14/12と終了日1/5/13の場合)。
正常に処理される場合もあります(たとえば開始日9/14/12と終了日1/31/13の場合)。
日付選択コンテンツコントロールの表示形式は"m/d/yy"ですが、これを"m/d/yyyy"に変えると正常に処理されるので、原因は表示形式にあるのではないかと考えられますが、なぜ"m/d/yy"ではデータを正しく取得できないのでしょうか?
2点目は、コンボボックスで「災害」を選んだ時には日付選択コンテンツコントロールを非表示にしたいため、font.color=wdcolorwhiteを設定しているのですが、これを設定するとコンボボックスで選択した値が、コンボボックスに正常に表示されなくなります。
白や灰色になったり、アクティブと非アクティブは切り替わっているので、値を選択したことになってはいるようですが、表示上はデフォルトの「選択してください」に戻ってしまいます。
これを解消するには、どうすれば良いでしょうか?
問題は以上の2点です。
どうかご教示いただきたく、お願いいたします。
|
|