[[20251028153709]] 『ユーザーフォームのボタンの色だけ変更したい。』(栗栄太) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『ユーザーフォームのボタンの色だけ変更したい。』(栗栄太)

ユーザーフォームにボタンを配置し、
クリックイベントを以下のようにしました。

この時 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.