あんなプロパティが欲しい。
こんなメソッドがあればいいのに。
クリックしたときに、なにかやらせたい。(イベント(※)をつくりたい。)
と思った人はclsColorbuttonクラスのモジュールに直接プロパティ、メソッドやイベント(※)を追加しましょう。
※:Macではイベントは作れません。Mac、Windowsともに動作するマクロを作りたい場合は注意して下さい。
え?継承するのが普通のやり方じゃないかって?それってVBAで出来たんだっけ?
1、プロパティを追加する。
2、メソッドを追加する。
3、イベントを追加する。
Visibleプロパティの追加を例に説明します。
追加するプロパティの説明:Trueにすると表示され、Falseにするとカラーボタンが画面から見えなくなる。
追加方法:
- VBE(VisualBasicEditor)の[挿入]-[プロシージャ]を選択します。ダイアログが出たら、[名前]に
"Visible"を、[種類]には"Propertyプロシージャ"を選択して[OK]ボタンを押します。これで、Visibleプロパティのプロパ
ティプロシージャのひな形が自動生成されます。
※1:自分で入力しても良いです。
※2:プロパティの型はVariant型からBooleanに直して下さい。
- 以下のようにコードを入力します。
Public Property Get
Visible() As Boolean
Visible = lblColorButton.Visible
End Property
Public Property Let Visible(ByVal vNewValue As
Boolean)
lblColorButton.Visible = vNewValue
lblColorButtonEffect.Visible = vNewValue
End Property
- Addメソッドの引数にVisibleプロパティを追加するには以下のように赤色の文字を追加します。
Public Sub Add(ByVal ContainerClassObject As Object, _
Optional ByVal Left As
Single = 0, _
Optional ByVal Top As Single = 0, _
Optional ByVal Height
As Single = 21, _
Optional ByVal Width
As Single = 21, _
Optional ByRef Caption
As String = "", _
Optional ByVal
ColorIndex As Long = 0, _
Optional ByVal Value
As Boolean = False,
_
Optional ByRef
ControlTipText As String = "", _
Optional ByRef Locked
As Boolean = False, _
Optional ByVal Visible As Boolean = True)
:
:
:
'
引数で指定された値を代入
'(これにより、各プロパティのPropertyLetプロシージャが呼び出されます)
With Me
.Caption = Caption
.ColorIndex = ColorIndex
.Value = Value
.ControlTipText =
ControlTipText
.Locked = Locked
.Visible = Visible
End With
ZOrderメソッドを例に説明します。
追加するメソッドの説明:カラーボタンのZオーダーを変更する。(最前面へ移動、最背面へ移動を行う。)
追加方法:以下のコードを追加します。
Public Sub ZOrder(ByVal zPosition As Long)
Select Case zPosition
Case
fmZOrderFront
Call
lblColorButtonEffect.ZOrder(zPosition)
Call
lblColorButton.ZOrder(zPosition)
Case
fmZOrderBack
Call
lblColorButton.ZOrder(zPosition)
Call
lblColorButtonEffect.ZOrder(zPosition)
Case
Else
Call
Err.Raise(380, , "ZOrderプロパティをセットできません。" _
& "プロパティの値が無効です" _
& "0から1までの値を入力してください。")
End Select
End Sub
注意:何回も書いていますが、Macではイベントの追加はできません。(Eventステートメントが
ない。)
Clickイベントを例に説明します。
追加方法:以下の赤文字のコードを追加します。
Option Explicit '暗黙の型宣言の禁止
Private WithEvents lblColorButton As msforms.Label
Private WithEvents lblColorButtonEffect As msforms.Label
Public Event Click()
:
:
:
Private Sub lblColorButton_Click()
RaiseEvent Click
With Me
If Not
.Locked Then
.Value = Not .Value
End If
End With
End Sub
イベントを使用したい場合、Userform側やクラスモジュールのモジュールレベルでclsColorButtonクラスの変数宣言をする際は
WithEventsをつけます。