Word VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


178 / 886 ←次へ | 前へ→

【732】コンテンツコントロールの値をVBAで取得する
質問  soeda  - 12/9/15(土) 0:11 -

引用なし
パスワード
   はじめまして。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点です。
どうかご教示いただきたく、お願いいたします。
1,666 hits

【732】コンテンツコントロールの値をVBAで取得する soeda 12/9/15(土) 0:11 質問[未読]
【741】Re:コンテンツコントロールの値をVBAで取得す... マナ 13/4/30(火) 10:46 発言[未読]

178 / 886 ←次へ | 前へ→
ページ:  ┃  記事番号:
207136
(SS)C-BOARD v3.8 is Free