0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【ユーザーフォーム】アドイン内のセルを使って着色。さらに簡単に統一感のあるデザインにする【ExcelVBA】

Last updated at Posted at 2022-02-24

これを改良。色設定をセルを使って直接ビジュアル的に行います。

シート用意

アドインの有効化On/Off

アドインブック上でアドイン有効化を解除するを実行するとそのアドインがただのブック同様の画面が開きます。

Option Explicit

Sub アドイン有効化を解除する()
  ThisWorkbook.IsAddin = False
End Sub

Sub アドインを有効化する()
  ThisWorkbook.IsAddin = True
End Sub

image.png

コードで使うために各セルに名前を付ける

image.png

各セルの背景色と文字色を普通に変更する

※今回はフォントその他のプロパティは拾ってませんが、Rangeオブジェクトに紐づくプロパティなら何でも拾えるので好き好きで設定してみてください。

image.png

アドインを有効化するを実行してシートを非表示に戻す

この処理もいちいちVBE開くのが面倒なのでボタンを挿入してマクロを登録しておきます。

メインコード

解説

先ほど付けたセルの名前はここで使われます。

Public Const ws設定 = "設定"
Const adrs背景 = "my背景"
Const adrsコントロール = "myコントロール"
Const adrsテキストBOX = "myテキストBOX"

Type~で構造化しておいて、Set色をセットするで名前付きセルの色を読み込みます。

Private Type colorUF_
  Main_Fill As Long
  Main_Text As Long
  
  Control_Fill As Long
  Control_Text As Long
  
  TextBox_Fill As Long
  TextBox_Text As Long
End Type
Private clrUF As colorUF_

Private Sub Set色をセットする()
  With ThisWorkbook.Sheets(ws設定)
    clrUF.Main_Fill = .Range(adrs背景).Interior.Color
    clrUF.Main_Text = .Range(adrs背景).Font.Color
    
    clrUF.Control_Fill = .Range(adrsコントロール).Interior.Color
    clrUF.Control_Text = .Range(adrsコントロール).Font.Color
    
    clrUF.TextBox_Fill = .Range(adrsテキストBOX).Interior.Color
    clrUF.TextBox_Text = .Range(adrsテキストBOX).Font.Color
  End With
End Sub

メインコード

Option Explicit

Public Const ws設定 = "設定"
Const adrs背景 = "my背景"
Const adrsコントロール = "myコントロール"
Const adrsテキストBOX = "myテキストBOX"


Private Type colorUF_
  Main_Fill As Long
  Main_Text As Long
  
  Control_Fill As Long
  Control_Text As Long
  
  TextBox_Fill As Long
  TextBox_Text As Long
End Type
Private clrUF As colorUF_

Public Sub UFの全コントロールのTypeNameを出力する(myUF As UserForm)
  
  Dim e As Control
  For Each e In myUF.Controls
    Debug.Print e.Name, TypeName(e)
  Next

End Sub

Public Sub UFの全コントロールを着色する(myUF As UserForm)
  Call Set色をセットする
  Call 指定コントロールを着色(myUF, clrUF.Main_Fill, clrUF.Main_Text)
  
  Dim e As Control
  For Each e In myUF.Controls
    Call 指定コントロールのフォント設定(e, "Meiryo UI", 12, True)
    
    Select Case TypeName(e)
      Case "Label", "Frame"
        Call 指定コントロールを着色(e, clrUF.Main_Fill, clrUF.Main_Text)
        
      Case "ListView4", "TextBox", "ListBox", "ComboBox"
        Call 指定コントロールを着色(e, clrUF.TextBox_Fill, clrUF.TextBox_Text, clrUF.TextBox_Text)
        
      Case "CommandButton"
        Call 指定コントロールを着色(e, clrUF.Control_Fill, clrUF.Control_Text)
    End Select
  Next

End Sub


Private Sub Set色をセットする()
  With ThisWorkbook.Sheets(ws設定)
    clrUF.Main_Fill = .Range(adrs背景).Interior.Color
    clrUF.Main_Text = .Range(adrs背景).Font.Color
    
    clrUF.Control_Fill = .Range(adrsコントロール).Interior.Color
    clrUF.Control_Text = .Range(adrsコントロール).Font.Color
    
    clrUF.TextBox_Fill = .Range(adrsテキストBOX).Interior.Color
    clrUF.TextBox_Text = .Range(adrsテキストBOX).Font.Color
  End With
End Sub


Public Sub 指定コントロールのフォント設定(myControl As Variant, _
                                           フォント As String, _
                                             サイズ As Double, _
                                      Optional Bold As Boolean)
  Rem myControlがVariantなのはMeがControlではないため
  
  With myControl.Font
    .Name = フォント
    .Size = サイズ
    .Bold = Bold
  End With
  
End Sub

Public Sub 指定コントロールを着色(myControl As Variant, _
                                     背景色, _
                                     Text_, _
                            Optional 境界色)
  Rem myControlがVariantなのはMeがControlではないため
  
  On Error Resume Next
  With myControl
    .BackColor = 背景色
    .ForeColor = Text_
    If IsMissing(境界色) = False Then: .BorderColor = 境界色
  End With
End Sub


ユーザーフォーム側から呼ぶ

Private Sub UserForm_Initialize()
  'ほかの処理
  Call UFの全コントロールを着色する(Me)
  
End Sub

別バージョンも使わないセル範囲に残しておいて適宜設定範囲に値と書式を貼り付けてやればデザインテーマが一瞬で変更できます。

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?