Property Get プロシージャを作るFunction
Property Get プロシージャを作るFunction
最近やたらProperty
を多用しているので、Property
プロシージャを書くのが面倒になってきた。
特にProperty Get
なんて同じパターンの繰り返しが多いので、Functionにしてやった。
Property Getを作るFunctionのコード
リスト1 標準モジュール
Public Function getPropertyGetProcedureString( _ ByVal propertyName As String, _ ByVal returnValueType As VbVarType) As String Dim ret As String Dim tmp As String tmp = convertPascalToCamel(propertyName) tmp = StrConv(tmp, vbLowerCase) Dim privateVariable As String privateVariable = tmp ret = "Public Property Get " & propertyName & "() " ret = ret & "As " & getVarTypeString(returnValueType) & vbCrLf ret = ret & vbTab ret = ret & propertyName & " = " ret = ret & privateVariable & vbCrLf ret = ret & "End Property" getPropertyGetProcedureString = ret End Function Private Function convertPascalToCamel( _ ByVal targetVar As String) As String Dim ret As String ret = targetVar Dim tmp As String tmp = Left(ret, 1) tmp = StrConv(tmp, vbLowerCase) ret = tmp & Right(ret, Len(ret) - 1) convertPascalToCamel = ret End Function Private Function getVarTypeString( _ ByVal varType As VbVarType) As String Dim ret As String ret = "Variant" Select Case varType Case vbBoolean: ret = "Boolean" Case vbByte: ret = "Boolean" Case vbCurrency: ret = "Currency" Case vbDate: ret = "Date" Case vbDecimal: ret = "Decimal" Case vbDouble: ret = "Double" Case vbInteger: ret = "Integer" Case vbLong: ret = "Long" Case vbObject: ret = "Object" Case vbSingle: ret = "Single" Case vbString: ret = "String" Case Else: ret = "Variant" End Select getVarTypeString = ret End Function
引数にプロパティ名と型を受け取って、Property Get
プロシージャの形に整形した文字列を返す、というアホ丸出しのコードw
型の名前を打ち込むのは面倒だと思ったので、VBA組み込みのVbVarType
列挙体の力を借りてやった。
受け取ったVbVarType
の値は、自作のgetVarTypeString
で型名文字列に変換する。これで、コード入力時にいちいち「String
」とか「Long
」とか打ち込む必要はなくなったが、その反面、自作クラス型とかには対応できない。ちょっとイマイチだったかもw
私の場合、最近のオレオレコーディング規約では、
- Property名はパスカル記法
- 対応する
Private
変数は、Property名をキャメル記法にして後ろに「_
」(アンダースコア)を付ける
というようにしているので、自作のconvertPascalToCamel
でProperty名をキャメル記法に変換するようにしている。
使ってみる
試しに、Property名が「Name
」、String
型のProperty Get
プロシージャを作ってみる。
イミディエイト・ウインドウに、
?getPropertyGetProcedureString("Name",vbString)
と打ち込んで、[Enter]を押す。
バッチリ。
おわりに
『VBA Developper's Handbook』に載っていたClipboard
クラスと併用すれば、便利かも。