入力を促すメッセージを特定日だけ表示するには?

Question 76.5 Excel VBA Borad (掲示板)より Previous Next
パートの給与データを、20人程毎日入力しています。 そのうち2人の人に30日になると特別手当を支給します。
コードNOはコンボボックスで選択しています。
月 日 コードNO.
11 30 4060002
特別手当の入力を忘れないために30日になると MsgBox(特別手当を入れましょう)のメッセージを入れたいのですが、コードNOを入力する度にメッセージが出ます。
上記状況の中で、30日になればMsg(特別手当を入れましょう)のメッセージが1回だけ出る方法を教えて下さい。宜しくお願いします。
Answer   2005.11.9 永井善王
作成されたマクロをお示しになると、レスが付きやすいと思いますが。
どうかご勘弁を
他のプログラムと一緒にMsgboxを組んでいたのですが、うまく走らず消してしまいました。申し訳ございません。私にとってVBAは素人なもので、試行錯誤のなかで作ったものですから思い出すのが大変です。どうかご勘弁を---
Answer  
ユーザーフォームのコンボボックスを使ってみえるのでしたら、「特別手当を入れましょう」メッセージもユーザーフォームに表示しては如何でしょうか。
例えば、ユーザーフォーム上に特別手当入力用のテキストボックスを配置してみえるかと思いますが、その右か下に、それ用のラベル (ここでは
Label2 としておきます) を配置しておきます。
そして、ユーザーフォームのコード画面で、下記のように作成します。
Private Sub ComboBox1_Change()
    If ComboBox1.Value = "4060002" Then
        If Day(Now) = 30 Then
            Label2.Caption = "30日です、入れましょう"
        End If
    End If
End Sub

Private Sub UserForm_Initialize()
    Label2.Caption = ""
End Sub
メッセージは、Label2のプロパティの ForeColor に赤色を設定しておけば、十分目立つと思います。(右図参照)
「メッセージが1回だけ出る方法」の必要性が理解できませんが、既に特別手当を入力済みの場合は出したくないということでしたら、上記のComboBox1_Changeイベントプロシージャに特別手当用テキストボックスの値を判定するコードを追加すれば可能になると思います。
また、上記のプロシージャは "4060002" だけ対象にしていますが、2人いるなら下記のように or で追加すれば可能になります。
If ComboBox1.Value = "4060002" Or ComboBox1.Value = "nnnnnnn" Then
なお、2月は30日がないので対策が必要かと思います。
感謝いたします
「メッセージが1回だけ出る方法」の意味は、手当がない人のコードを入力してもメッセージが出るので30日になったら複数の人数を入力する前に気ずきを与える為・1回だけ-- と言う意味です。言葉足らずですみませんでした。
「2月は30日がないので…」につきましては、有難うございます,その通りですね。

教えていただいたプログラム、トライしてみます。楽しみです。全般に私みたいなものに、細かく真剣に取り組んで頂いたことに感謝いたします。
お願いします
今,下記のプログラムを入れたのですが、実行すれば、
Label2.Caption = "" の所と
If ComboBox1.Value = "4060002" Then の所で [実行時エラー'424'オブジェクトが必要です] とメッセージが出ます。教えて下さい。
明日,明後日は会社が休みなので来週月曜日迄急ぎません。宜しくお願いします。
Answer  
実行時エラーは、多くの場合その原因が表示されていますから、まずは、それに沿ってエラー原因を取り除く努力をしましょう。
この場合、[オブジェクトが必要です] 、つまり、コードに記述されたオブジェクト(Label
2、または、Combobox1)が
ユーザーフォームにないからではないでしょうか。

もう少し詳しくご説明しますと、回答用に私が作成したユーザーフォームは右図のとおりで、ラベルは Label
2
コンボボックスは ComboBox
1 になっていますので、マクロコードには、その番号を記述しています。

これに対して、あなたが作成された本番用ユーザーフォームでは、それぞれ何番になっていますか。
番号の再確認はユーザーフォームのデザイン画面で、それぞれのコントロールをクリックすれば、[プロパティ]の[(オブジェクト名)]に表示されます。
コード画面で、エラーの出た行にある Label と ComboBox の番号を修正してください。

念のため、
If ComboBox1.Value = "4060002" Then のプロシージャ名 Private Sub ComboBox1_Change() にある番号と一致することも確認してください。 上手くいくことを祈っています。
ありがとうございました
お返事遅れてすみませんでした。
コード入力はコンボボックスを使ってはいますが、ユーザーシートは使っていません。ユーザーシートはまだ勉強していません、これからの課題です。
それで出来る範囲で色々試行錯誤しました結果、苦肉の策で、各入力箇所の背景に色を使っていますので余白に
"xxx入力して下さい。" と文字を入力し、背景の色と同じ文字の色をつけ見えないようにしました。
そして日にちが25日 (おっしゃるように来年度2月等を考え25日にしました) ならばその文字の色をはっきり見える色にしなさい というマクロを組みました。
忙しい中に時間をつくってVBAの基礎を学びたいと思っています。この件はこれにて終わっておきます。
本当にご親切にたくさん書いて頂きありがとうございました。

Excel VBA Macro