『ユーザーフォームのボタンの色だけ変更したい。』(栗栄太)
ユーザーフォームにボタンを配置し、
クリックイベントを以下のようにしました。
この時 Application.Dialogs から処理が返ってきたときに
設定した色でシート上のセルの文字の色が変更されてしまいます。
シートには影響しないようにできませんか?
Private Sub btnColor_Click()
Dim strcolor As String
Dim R As Integer, G As Integer, B As Integer
strcolor = Right("000000" & Hex(btnColor.BackColor), 6)
R = CInt("&H" & Right(strcolor, 2))
G = CInt("&H" & Mid(strcolor, 3, 2))
B = CInt("&H" & Left(strcolor, 2))
If Application.Dialogs(xlDialogEditColor).Show(1, R, G, B) = True Then
btnColor.BackColor = ActiveWorkbook.Colors(1)
End If
End Sub
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
覚えておいて、元にもどす
OrgColor1 = ActiveWorkbook.Colors(1)
If Application.Dialogs(xlDialogEditColor).Show(1, R, G, B) = True Then
btnColor.BackColor = ActiveWorkbook.Colors(1)
ActiveWorkbook.Colors(1) = OrgColor1
End If
といいのでは。
(´・ω・`) 2025/10/28(火) 16:05:15
質問と関係ない事で出しゃばってしまって恐縮ですが、 RGB値の各要素分解については↓こんな風に書く事も出来ます。
Option Explicit
Private Type typeINT32
Value As Long
End Type
Private Type typeCOLORREF
Red As Byte
Green As Byte
Blue As Byte
NoData As Byte
End Type
Private Sub btnColor_Click()
Dim c As typeCOLORREF, i As typeINT32
i.Value = btnColor.BackColor
LSet c = i
If Application.Dialogs(xlDialogEditColor).Show(1, c.Red, c.Green, c.Blue) Then
btnColor.BackColor = ActiveWorkbook.Colors(1)
End If
End Sub
(白茶) 2025/10/28(火) 19:36:36
あ。そうそう。 ついでに↓こんな関数も追加しておけば
Private Function GetGamma(arg1 As OLE_COLOR) As Single
Const prmR = 0.298912!, prmG = 0.586611!, prmB = 0.114478!
Dim c As typeCOLORREF, i As typeINT32
i.Value = arg1
LSet c = i
GetGamma = (c.Red * prmR + c.Green * prmG + c.Blue * prmB) / &HFF&
End Function
btnColor背景色の輝度に応じて文字色を白か黒のどちらか目立つ方に切り替える事も出来ますよ。 (シート見出しの背景色と文字色の関係に似た措置だと思って下さい)
If Application.Dialogs(xlDialogEditColor).Show(1, c.Red, c.Green, c.Blue) Then
btnColor.BackColor = ActiveWorkbook.Colors(1)
btnColor.ForeColor = IIf(GetGamma(btnColor.BackColor) > 0.5!, &H0&, &HFFFFFF)
End If
ご参考迄
(白茶) 2025/10/28(火) 19:40:24
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.