自分用備忘録として。
ダイアログのOKボタンを押すと「true」が返されるため、色を選択した場合の処理はif文の中に記載するのがポイント。そうしないと、キャンセルボタンを押したときとRGB(0,0,0)を選択したときの戻り値がどちらも「0」になる。
Sub ColorSelect()
Dim COLOR As Long '戻り値。RGB値が10進数で返される
Dim R As Integer
Dim G As Integer
Dim B As Integer
'Showの引数→(Index,Red,Green,Brue)
If Application.Dialogs(xlDialogEditColor).Show(1, 255, 50, 100) = True Then
COLOR = ActiveWorkbook.Colors(1)
'10進数で返された値を16進数に変換→2文字ずつ抽出→16進数を10進数に再変換
R = WorksheetFunction.Hex2Dec(Right(Hex(COLOR), 2))
G = WorksheetFunction.Hex2Dec(Mid(Hex(COLOR), 3, 2))
B = WorksheetFunction.Hex2Dec(Left(Hex(COLOR), 2))
MsgBox R & "," & G & "," & B
End If
End Sub
実行結果
実行すると引数で指定した色が選択された状態でカラーダイアログが表示される。参考:
https://kosapi.com/post-900/
https://vba-corner.livejournal.com/1691.html