色の知識で人生の可能性が広がる!みんなに役立つ色彩検定 >>

VBA初心者です。
ユーザーフォームでカレンダーを自作しました。
ボタン一つ一つに日付を入れるところまではできたのですが、クリックするたび色が変わるマクロが思いつきません。

コマンドボタン一つずつにマクロを組むしかないのでしょうか??


使用内容
基本土日休みだが、長期連休および連休明けは出勤日が異なる為ボタンの塗りつぶしで判断できるようになりたい。

「VBA 自作カレンダー コマンドボタンに」の質問画像
教えて!goo グレード

A 回答 (7件)

CommandButton1~3において。



クラスモジュール名『Class1(追加した際のデフォルト)』に、

Public WithEvents myComBt As MSForms.CommandButton

Private Sub myComBt_click()

With myComBt

If .Caption <> "" Then .BackColor = IIf(.BackColor = vbButtonFace, vbButtonShadow, vbButtonFace)

End With

End Sub

標準モジュールに

Private cb(1 To 3) As New Class1

Private Sub UserForm_Initialize()
Dim i As Integer

For i = 1 To 3 ' 3個なので。
Set cb(i).myComBt = Me.Controls("CommandButton" & i)
Next

End Sub

Private Sub UserForm_Terminate()
Dim i As Integer

For i = 1 To 3
Set cb(i).myComBt = Nothing
Next

End Sub

でも多分求める物に近いのは出来てるかも・・・・
    • good
    • 0
この回答へのお礼

助かりました

わかりやすい説明をして頂きありがとうございます。
自分のイメージしていた動作になりました。

お礼日時:2021/12/27 15:02

No.4です。



ミスりました。

>標準モジュールに

ではなくユーザーフォームモジュールです。
ごめんなさい。
    • good
    • 0

#5です


#4様の回答を見て。。ああ、そういう事でしたか、、

なるほど、、すでに回答されていますが 参考サイトです
https://blog.goo.ne.jp/pc_college/e/9ca2b0c452e9 …
    • good
    • 1

こんばんは


ご質問の内容だけでは、どのようなものをしたいのか分かりませんが
表示した自作カレンダーのコマンドボタンを手動で印をつけるだけであれば
個別で良いと思いますね。例えば

Private Sub CommandButton1_Click()
Call CBtn_BackColor(Me.CommandButton1)
End Sub
Sub CBtn_BackColor(CBtn As Object)
With CBtn
If .BackColor = vbButtonFace Then
.BackColor = RGB(255, 0, 0)
Else
.BackColor = vbButtonFace
End If
End With
End Sub

纏めてやる方法は沢山ありますが、
カレンダーをどのように作成(Initialize)しているかですかね。

例えば、Weekday関数やリストなどを作り設定しているのなら
Initialize時にButton.Caption設定時にBackColorを設定すれば良いだけです

ボタンCaptionが1、2、、、と表示されているのでその位置を特定する
処理にBackColorを追加すると言う事ですね

本格的なカレンダーを作成しているのなら 祝日や休日のパラメータを
シートなどに纏めてClassやFunctionなどで取得すれば良いのかな、、と思います。

取り敢えず、ボタンの色を設定するのは .BackColor です
    • good
    • 0

Worksheet_SelectionChangeイベントでクリックしたセルは「Target」です。

    • good
    • 0

https://excelappwithvba.web.fc2.com/managing_exc …
https://excelappwithvba.web.fc2.com/managing_exc …

こう言う方法もありますけど理解するのが大変かも。
正直VB(.NET)の方がこの場合だけなら楽に思える。
    • good
    • 0

vbaでもコントロール配列チックなものを作ることもできますが、、、



https://excelappwithvba.web.fc2.com/managing_exc …

このあたりを理解して、目的に合わせて改良し実装することを考えると、それぞれに書いたほうが楽かもしれません。

ちな、来年1月は6週ありますw
    • good
    • 1
この回答へのお礼

がんばります

迅速な回答ありがとうございました。
まだまだ初心者でわからないことだらけなのでこれからも頑張ります!

お礼日時:2021/12/27 15:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング