文字列型の列挙体?
文字列型の列挙体?
かつて、
こんなことを試みたことがあった。
しかし、PredeclaredId
をTrue
にしたクラスモジュールを用いていたために、必ずクラス名を記述しなくてはいけなかった。
これはイマイチである。
XlLineStyle
列挙体を用いるときに、必ずXlLineStyle.xlContinuous
と書かねばならんようなものだからである。
チャクラ開く
ちょっと待てよ……。
クラスモジュールを使うから、クラス名記述の強制という問題が起こるのだ。……ということは、
標準モジュール使えばよくね?
ええ、おチャクラ開きましたとも。
標準モジュールのPropertyを使う
標準モジュールを挿入して、オブジェクト名をWaruguchi
にする。
で、次のコードを記述。
標準モジュール Waruguchi
Option Explicit Public Property Get wgAho() As String wgAho = "アホ" End Property Public Property Get wgBoke() As String wgBoke = "ボケ" End Property Public Property Get wgKasu() As String wgKasu = "カス" End Property Public Property Get wgSuttokoDokkoi() As String wgSuttokoDokkoi = "スットコドッコイ" End Property
列挙体の要素っぽい名前にして、全部Property Get
にしたったw
使ってみる
別の標準モジュールで利用しようとしてみる。
おお! いい感じではないか!
出来上がったのが次のコード。
リスト1 標準モジュール
Private Sub test() Call MsgBox(wgAho) End Sub
これだけ。
こいつを実行すると、
うむ。すばらしい。
ちょっと待て!
なるほど、標準モジュールの場合、名前かぶりさえなければ、親モジュールの記載がなくてもメソッドやプロパティを呼ぶことができる。だから、このようなことができた。
しかし!
列挙体のメリットは、一族をまとめるだけに非ず。引数や返り値の型に指定できるところにあるのだ。
標準モジュールは「型」ではなかった……orz
おわりに
……というわけで、派手に頓挫。
まあ、たとえば、Waruguchi
モジュールのコードを
Option Explicit Public Enum WgWaruguchi wgAho = 1 wgBoke wgKasu wgSuttokoDokkoi End Enum Public Property Get Waruguchies( _ ByVal kindOfWaruguchi As WgWaruguchi) As String Dim ret As String ret = "ち~んw" Select Case kindOfWaruguchi Case wgAho: ret = "アホ" Case wgBoke: ret = "ボケ" Case wgKasu: ret = "カス" Case wgSuttokoDokkoi: ret = "スットコドッコイ" End Select Waruguchies = ret End Property
にしておいたら、
Call MsgBox(Waruguchies(wgSuttokoDokkoi))
みたいにして呼べるけど、これもあんまりキレイじゃないしね。
……というわけで、派手に頓挫したのでした。ニンニン……。