Excel VBA質問箱 IV

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

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


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

【35835】コマンドボックスの色変更 初心者 06/3/14(火) 14:34 質問[未読]
【35836】Re:コマンドボックスの色変更 Blue 06/3/14(火) 14:40 質問[未読]
【35838】Re:コマンドボックスの色変更 初心者 06/3/14(火) 14:58 発言[未読]
【35839】Re:コマンドボックスの色変更 Blue 06/3/14(火) 15:08 発言[未読]
【35840】Re:コマンドボックスの色変更 Blue 06/3/14(火) 15:30 発言[未読]
【35841】Re:コマンドボックスの色変更 初心者 06/3/14(火) 16:26 発言[未読]
【35843】Re:コマンドボックスの色変更 Blue 06/3/14(火) 16:31 発言[未読]
【35844】Re:コマンドボックスの色変更 初心者 06/3/14(火) 16:46 発言[未読]
【35845】Re:コマンドボックスの色変更 Blue 06/3/14(火) 16:54 回答[未読]
【35846】Re:コマンドボックスの色変更 初心者 06/3/14(火) 16:59 発言[未読]
【35847】Re:コマンドボックスの色変更 Blue 06/3/14(火) 17:11 発言[未読]
【35849】Re:コマンドボックスの色変更 初心者 06/3/14(火) 17:35 発言[未読]
【35852】Re:コマンドボックスの色変更 Blue 06/3/14(火) 17:43 発言[未読]
【35855】Re:コマンドボックスの色変更 [名前なし] 06/3/14(火) 18:07 発言[未読]
【35856】Re:コマンドボックスの色変更 Blue 06/3/14(火) 18:14 回答[未読]
【35861】Re:コマンドボックスの色変更 [名前なし] 06/3/14(火) 18:39 お礼[未読]
【35863】Re:コマンドボックスの色変更 Blue 06/3/14(火) 19:30 発言[未読]

【35835】コマンドボックスの色変更
質問  初心者  - 06/3/14(火) 14:34 -

引用なし
パスワード
   お世話になります。

題名の件ですが、どうしても業務で必要な為、教えていただけると助かります。

方法は以下の通りです。

二つのセルを比較し、ユーザーフォーム内の色を
変える事は可能でしょうか?(ちなみに値は日付です。)

【変更方法】
日付で言うと、5ヶ月以上差がある場合は、緑
       3ヶ月以上 ”      黄色
       1ヶ月以上        青
       差がないとき       赤

以上よろしくお願い致します。

【35836】Re:コマンドボックスの色変更
質問  Blue  - 06/3/14(火) 14:40 -

引用なし
パスワード
   結局どの色を変えるのでしょうか?

ユーザフォーム?
コマンドボタン?
テキストボックス?
(コマンドボックスなんて始めて聞きました。)

それと、セルってどこのシートのどの位置のこと?

もう少し、詳しく説明してください。
(回答者はあなたの隣にはいないし、エスパーではない)

【35838】Re:コマンドボックスの色変更
発言  初心者  - 06/3/14(火) 14:58 -

引用なし
パスワード
   ▼Blue さん:
>結局どの色を変えるのでしょうか?
>
>ユーザフォーム?
>コマンドボタン?
>テキストボックス?
>(コマンドボックスなんて始めて聞きました。)
>
>それと、セルってどこのシートのどの位置のこと?
>
>もう少し、詳しく説明してください。
>(回答者はあなたの隣にはいないし、エスパーではない)

早速のお返事ありがとうございます。
説明不足ですいません。

まず、シートがそれぞれ同じ形式で39個あります。
そこでユーザーフォームにコマンドボタンを39個作成し、ボタンを押す事で指定したシートを表示するようにしています。

色の変更というのは、コマンドボタンの事です。
コマンドボタンは間違いです^^;

セルの位置というのは、各シートに日付記入欄を設けていて、その半年後(EDATE関数使ってます。)を表示させるセルの事です。(G8に作っています)

これを基準を今日(TODAY関数)にして
3月14日 <= 8月14日 ⇒緑
5月14日 <= 8月14日 ⇒黄色
7月14日 <= 8月14日 ⇒青
8月15  <= 8月14日 ⇒赤

という風に、コマンドボタンの色を変えたいのです。

説明足りたでしょうか?

【35839】Re:コマンドボックスの色変更
発言  Blue  - 06/3/14(火) 15:08 -

引用なし
パスワード
   色が変わるタイミングはユーザフォームが立ち上がったときでよいのでしょうか?

日付の計算は DataDiff 関数が使えそうです。

コマンドボタンの色は BackColor プロパティでかえれます。
(緑:vbGreen,黄色:vbYellow,青:vbBlue,赤:vbRed)

コマンドボタンのオブジェクト名が、CommandButton1みたいになっていれば、
最終的にはFor文を使ってみるとすっきりとするかも。

【35840】Re:コマンドボックスの色変更
発言  Blue  - 06/3/14(火) 15:30 -

引用なし
パスワード
   一応サンプル

UserForm上に CommandButton1〜CommandButton3があり
Sheet1〜Sheet3の A1 の日付によって、UserFormが立ち上がったときにボタンの色をつける。
(テスト不十分)

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

【35841】Re:コマンドボックスの色変更
発言  初心者  - 06/3/14(火) 16:26 -

引用なし
パスワード
   ▼Blue さん:
>一応サンプル
>
>UserForm上に CommandButton1〜CommandButton3があり
>Sheet1〜Sheet3の A1 の日付によって、UserFormが立ち上がったときにボタンの色をつける。
>(テスト不十分)
>
>Private Sub UserForm_Initialize()
>  Dim i As Integer
>  Dim d As Date
>  Dim c As OLE_COLOR
>  
>  For i = 1 To 3
>    ' シートiのA1の日付を取得
>    d = Worksheets(i).Range("A1").Value
>    
>    ' 月の差によって分岐
>    Select Case Abs(DateDiff("m", d, Date))
>    ' 5ヶ月以上
>    Case Is >= 5
>      c = vbGreen
>    ' 3ヶ月以上
>    Case Is >= 3
>      c = vbYellow
>    ' 1月以上
>    Case Is >= 1
>      c = vbBlue
>    ' 1月未満
>    Case 0
>      c = vbRed
>    End Select
>    
>    ' ボタンの色を設定
>    Me.Controls("CommandButton" & CStr(i)).BackColor = c
>    ⇒ここで、「メソッド。または、データメンバがありません」と表示されてしま     います。
 Next
>End Sub
後、ここの日の比較はPC内の時間と比較しているんでしょうか>?

【35843】Re:コマンドボックスの色変更
発言  Blue  - 06/3/14(火) 16:31 -

引用なし
パスワード
   >    ⇒ここで、「メソッド。または、データメンバがありません」と表示されてしまいます。
> >UserForm上に CommandButton1〜CommandButton3があり
となっていますか?コマンドボタンの名前(オブジェクト名)が違ったり、ボタンがなかったりすると当然起こられます。


>後、ここの日の比較はPC内の時間と比較しているんでしょうか>?
>>    ' 月の差によって分岐
>>    Select Case Abs(DateDiff("m", d, Date))
ここですね。Date関数を調べてみてください。

【35844】Re:コマンドボックスの色変更
発言  初心者  - 06/3/14(火) 16:46 -

引用なし
パスワード
   ▼Blue さん:
>>    ⇒ここで、「メソッド。または、データメンバがありません」と表示されてしまいます。
>> >UserForm上に CommandButton1〜CommandButton3があり
>となっていますか?コマンドボタンの名前(オブジェクト名)が違ったり、ボタンがなかったりすると当然起こられます。
>
>
>>後、ここの日の比較はPC内の時間と比較しているんでしょうか>?
>>>    ' 月の差によって分岐
>>>    Select Case Abs(DateDiff("m", d, Date))
>ここですね。Date関数を調べてみてください。

お返事ありがとうございます。
オブジェクトの名前が間違っており
Me.contlst("NO1" & CStr(i)).BackColor = c
に訂正しました。

しかし、エラーの発生箇所が[contlst]でエラーが入ってるのですが。

【35845】Re:コマンドボックスの色変更
回答  Blue  - 06/3/14(火) 16:54 -

引用なし
パスワード
   >しかし、エラーの発生箇所が[contlst]でエラーが入ってるのですが。
綴りが間違っています。

Controls

です。
UserForm上のコントロール群という意味ですから。

【35846】Re:コマンドボックスの色変更
発言  初心者  - 06/3/14(火) 16:59 -

引用なし
パスワード
   ▼Blue さん:
>>しかし、エラーの発生箇所が[contlst]でエラーが入ってるのですが。
>綴りが間違っています。
>
>Controls
>
>です。
>UserForm上のコントロール群という意味ですから。

お返事ありがとうございます。

しかし、先程と同様エラーがでたのですが。。

度々すいません。

【35847】Re:コマンドボックスの色変更
発言  Blue  - 06/3/14(火) 17:11 -

引用なし
パスワード
   > Me.Controls("NO1" & CStr(i)).BackColor = c

NO1でいいのでしょうか?

"NO" ではないでしょうか?


Me.Controls("NO1" & CStr(i)).BackColor = c



i = 1 のとき
NO11というコマンドボタンの背景を変更します。

i = 2 のとき
NO12というコマンドボタンの背景を変更します。




i = 39 のとき
NO139というコマンドボタンの背景を変更します。

ということになりますが、全てのボタンはそのような名前になっていますか?

【35849】Re:コマンドボックスの色変更
発言  初心者  - 06/3/14(火) 17:35 -

引用なし
パスワード
   多少修正しました。
以下のコードにしてみました。

Sub ユーザフォームオープン()
  UserForm1.Show
  Dim i As Integer
   Dim d As Date
   Dim c As OLE_COLOR
  
   For i = 1 To 39
     ' シートiのA1の日付を取得
     d = worksheets("i").Range("K1").Value 
   
     ' 月の差によって分岐
     Select Case Abs(DateDiff("m", d, Date))
     ' 5ヶ月以上
     Case Is >= 5
       c = vbGreen
     ' 3ヶ月以上
     Case Is >= 3
       c = vbYellow
     ' 1月以上
     Case Is >= 1
       c = vbBlue
     ' 1月未満
     Case 0
       c = vbRed
     End Select
   
     ' ボタンの色を設定s
     UserForm1.Controls("NO," & CStr(i)).BackColor = c ←Meから変更
   Next

上記のように書き直した所、インデックスが有効な範囲にありませんと言われました。

今、TODAY関数で試しているからでしょうか?


>i = 2 のとき
>NO12というコマンドボタンの背景を変更します。
>
>・
>・
>・
>i = 39 のとき
>NO139というコマンドボタンの背景を変更します。
>
>ということになりますが、全てのボタンはそのような名前になっていますか?

【35852】Re:コマンドボックスの色変更
発言  Blue  - 06/3/14(火) 17:43 -

引用なし
パスワード
   >      d = worksheets("i").Range("K1").Value 
iを"" で囲う必要はないのでは?

この処理は UserForm_Initialize に書かないとダメです。


UserForm1.Show

として時点で、その次の行に進むにはUserForm1を閉じないといけません。
モードレスで立ち上げてもいいのならば、

UserForm1.Show vbModal

とすれば動くかもしれませんが、あまりよろしくないです。

> 今、TODAY関数で試しているからでしょうか?
どこがですか?

【35855】Re:コマンドボックスの色変更
発言  [名前なし]  - 06/3/14(火) 18:07 -

引用なし
パスワード
   ▼Blue さん:
>>      d = worksheets("i").Range("K1").Value 
>iを"" で囲う必要はないのでは?
>この処理は UserForm_Initialize に書かないとダメです。
 ⇒ 変更し直しました^^;
>
>UserForm1.Show
>
>として時点で、その次の行に進むにはUserForm1を閉じないといけません。
>モードレスで立ち上げてもいいのならば、
>
>UserForm1.Show vbModal
>
>とすれば動くかもしれませんが、あまりよろしくないです。
 ⇒この記述にすると何がよろしくないのでしょうか?
>> 今、TODAY関数で試しているからでしょうか?
>どこがですか?
 ⇒基準と比較する日付です。(2006/3/14のように表示されます)
UserForm1.Show vbModal
を使用し、ユーザーフォームは起動するのですが、閉じるとシステムエラーになります。

この時、コマンドボタンは色変わらないです。

【35856】Re:コマンドボックスの色変更
回答  Blue  - 06/3/14(火) 18:14 -

引用なし
パスワード
   >UserForm1.Show vbModal
ごめんなさい。vbModelessでした。

> ⇒この記述にすると何がよろしくないのでしょうか?
・UserForm1に依存する処理を他のところで記述すべきであるか?
・モーダルで表示すべきなのに、この処理のためだけにモードレス表示すべきであるか?

という点から、UserForm1で処理させるべきと思います。
(よって、「この処理は UserForm_Initialize」に書くべき)


さて、
もうそろそろ、ご自分でデバッグ作業をなされてはどうでしょうか?
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_030.html

○作成したマクロの動作の確認方法
 △デバッグトレースの開始方法
 ○デバッグ中の操作
 ○変数値の参照
あたりを参考にしてみてください。正直サポートセンターのような対応は疲れます。

【35861】Re:コマンドボックスの色変更
お礼  [名前なし]  - 06/3/14(火) 18:39 -

引用なし
パスワード
   ▼Blue さん:
>>UserForm1.Show vbModal
>ごめんなさい。vbModelessでした。
>
>> ⇒この記述にすると何がよろしくないのでしょうか?
>・UserForm1に依存する処理を他のところで記述すべきであるか?
>・モーダルで表示すべきなのに、この処理のためだけにモードレス表示すべきであるか?
>
>という点から、UserForm1で処理させるべきと思います。
>(よって、「この処理は UserForm_Initialize」に書くべき)
>
>
>さて、
>もうそろそろ、ご自分でデバッグ作業をなされてはどうでしょうか?
>http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_030.html
>の
>○作成したマクロの動作の確認方法
> △デバッグトレースの開始方法
> ○デバッグ中の操作
> ○変数値の参照
>あたりを参考にしてみてください。正直サポートセンターのような対応は疲れます。

わかりました。色々ありがとうございました!!

【35863】Re:コマンドボックスの色変更
発言  Blue  - 06/3/14(火) 19:30 -

引用なし
パスワード
   良く考えてみたら、vbModelessにしなくても、
UserForm1.Showの位置を最後にもって行けばよかったですね。

一応、最終的にどうなったかの報告はしてくださいね。

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