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]を押す。

f:id:akashi_keirin:20190310171108j:plain

バッチリ。

おわりに

『VBA Developper's Handbook』に載っていたClipboardクラスと併用すれば、便利かも。