Excel VBA質問箱 IV

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

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


7711 / 13645 ツリー ←次へ | 前へ→

【37330】ユーザーフォームのボタン色変え たけし 06/4/30(日) 0:42 質問[未読]
【37332】Re:ユーザーフォームのボタン色変え neptune 06/4/30(日) 10:14 回答[未読]
【37333】Re:ユーザーフォームのボタン色変え たけし 06/4/30(日) 13:39 質問[未読]
【37335】Re:ユーザーフォームのボタン色変え kobasan 06/4/30(日) 17:33 発言[未読]
【37336】Re:ユーザーフォームのボタン色変え neptune 06/4/30(日) 18:25 回答[未読]
【37338】Re:ユーザーフォームのボタン色変え neptune 06/4/30(日) 20:42 回答[未読]
【37339】Re:ユーザーフォームのボタン色変え たけし 06/4/30(日) 21:02 お礼[未読]

【37330】ユーザーフォームのボタン色変え
質問  たけし  - 06/4/30(日) 0:42 -

引用なし
パスワード
   こんばんは。
いつもお世話になっております。

今回、表記件についてご質問させていただきました。

『内容』
1.保管する期限を決めて、「5ヶ月前=緑 3ヶ月前=青 1ヶ月前=赤」などに色 分けを行っており、期限を設定していない(使用していない時)は白で表示
 させるようにしています。
 しかし、残り一ヶ月前になっても、赤ではなく白に変わってしまいます。

 どなたか、ご教授お願いします。。。
コードは以下のとおりです。

Dim i As Integer
   Dim d As Date
   Dim c As OLE_COLOR
  
   For i = 1 To 39
     ' シートiのA1の日付を取得
      d = Worksheets(i + 1).Range("A91").Value
     ' 月の差によって分岐
     Select Case Abs(DateDiff("m", d, Date))
    
     Case Is = 0
     
      c = vbWhite
      
    
     ' 5ヶ月以上
     Case Is >= 5
       c = vbGreen
     ' 3ヶ月以上
     Case Is >= 3
       c = vbBlue
         ' 1月未満
     Case Is > 1
     
       c = vbRed
     End Select
   
     ' ボタンの色を設定s
     UserForm1.Controls("CommandButton" & CStr(i)).BackColor = c

【37332】Re:ユーザーフォームのボタン色変え
回答  neptune  - 06/4/30(日) 10:14 -

引用なし
パスワード
   >c = vbWhite
にブレークポイントを置いて実行してみましょう。
そして、止まった時に
>Abs(DateDiff("m", d, Date))
の値を確認してみましょう。

ロジックの間違いに気が付くはずです。

【37333】Re:ユーザーフォームのボタン色変え
質問  たけし  - 06/4/30(日) 13:39 -

引用なし
パスワード
   ▼neptune さん:
>>c = vbWhite
>にブレークポイントを置いて実行してみましょう。
>そして、止まった時に
>>Abs(DateDiff("m", d, Date))
>の値を確認してみましょう。
>
>ロジックの間違いに気が付くはずです。

お返事ありがとうございます。
早速試しましたが、ひとつわからない事があります。

case Is = 0 
のところで、使用者がいない場合のみ、TODAY関数を用いて、日付を=させています。
しかし、先ほど値を確認したところ、保管期限が(d=4月15日・date=4月30日)の場合のみでも白くなっています。

   ' 1月未満
     Case Is < 1
     
       c = vbRed
赤になるコードを記述していますが、白くなってしまう原因がわかりません。。

【37335】Re:ユーザーフォームのボタン色変え
発言  kobasan  - 06/4/30(日) 17:33 -

引用なし
パスワード
   今日は
分岐条件に不可解な点があるので、参考程度に見てください。

'UserForm1モジュールのPrivate Sub UserForm_Initialize()に

    Select Case Abs(DateDiff("m", d, Date)) ' 月の差によって分岐
      Case Is = 0, 1: c = vbRed    ' 0,1ヶ月
      Case Is = 2, 3, 4: c = vbBlue  ' 2,3,4ヶ月
      Case Is = 5, 6: c = vbGreen   ' 5ヶ月以上
      Case Else: c = vbWhite
    End Select
    ' ボタンの色を設定s
    UserForm1.Controls("CommandButton" & i).BackColor = c
    'DoEvents  '念のため

でどうですか。

>しかし、先ほど値を確認したところ、保管期限が(d=4月15日・date=4月30日)の場合のみでも白くなっています。
>
>   ' 1月未満
>     Case Is < 1
>     
>       c = vbRed
>赤になるコードを記述していますが、白くなってしまう原因がわかりません。。

【37336】Re:ユーザーフォームのボタン色変え
回答  neptune  - 06/4/30(日) 18:25 -

引用なし
パスワード
   ▼たけし さん:
やってみたものの気付いていないようですね。
>
>   ' 1月未満
>     Case Is < 1
>     
>       c = vbRed
>赤になるコードを記述していますが、白くなってしまう原因がわかりません。。
イミディエイトウィンドウに以下をコピペしてEnterを押してください。
?DateDiff("m", "4月15日", "4月30日")
結果は 0 になるはずです。

次のテストプログラムをステップ実行してみてください。
Sub t()
Dim I As Long
  I = 2
  Select Case I
    Case 2
      Debug.Print I
    Case 3
      Debug.Print I
    Case 0
      Debug.Print I
    Case 4
      Debug.Print I
  End Select
End Sub
2から下は評価しませんね。
最初にUPされたソースから言えば
>Case Is = 0
から下は評価しないのです。これはSelect文の仕様です。

ということです。

【37338】Re:ユーザーフォームのボタン色変え
回答  neptune  - 06/4/30(日) 20:42 -

引用なし
パスワード
   礒山賢司 さんの文書
「デバッグの達人になろう!」
http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/0001/debug/
が為になりますから、紹介しておきます。

【37339】Re:ユーザーフォームのボタン色変え
お礼  たけし  - 06/4/30(日) 21:02 -

引用なし
パスワード
   kobasanさん、neputuneさん

お二人の助言で、ほぼ実現する事ができました!!

ありがとうございます。

7711 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free