デザインパターンとVBA
GoF(Gang of Four)のデザインパターンをVBAで実装したらブログのネタになるんじゃないか?と思って検索したら、すでに同じことを考える人がいる訳でして、あえなく挫折しましたorz
Excel VBAだけで作るデザインパターン – 9号研究室オンラインショップ –
https://booth.pm/ja/items/4084624
これは記事ではなく、本にして売っているという販売サイトです。もともとはコミケで売ったものだそうです。いまどきはコミケでこういう本を売るのですね。
人様がすでに記事に(本に)しているものを私が記事にしても仕方がないので、今日は私が知っている数少ないデザインパターンのうち、Singleton(あるクラスについて、インスタンスがユニークであることを保証するパターン)をVBAで実装した例をちょっとだけ紹介しておきます。
といっても私が考えた訳ではなく、Webの海にあったものを以前見つけて、重宝に使っているというだけの関係なんですが。
コード自体はこちらを見てください。
エラー処理でSingletonを使っています。
Public Sub SetError(ByVal mdlName As String, ByVal prcName As String)
' 最初のエラーを設定する(すでにセットされていたらセットしない)
If moduleName = "" Then
moduleName = mdlName
End If
If procName = "" Then
procName = prcName
End If
End Sub
私は最初この記事を読んだとき、当時はデザインパターンなんて全く知りませんでしたので、「なんてすごい発想だ」と感動したものでした。
VBAでエラー処理するときやっかいなのが、エラーが上書きされてしまうことです。
エラーが発生した場所(モジュール、関数)とエラーの内容が分からなければ正しい対処もできません。
そこでどうにかエラー処理をうまくできないかと模索していたときに出会ったのが、このサイトでした(再掲)。
このコードの何がすごいかというと、最初だけしかmoduleNameとprocNameに値をセットしないってことです。
当時作っていたツールにさっそく採用し、以来、エラー処理にはこのクラスモジュールを流用しています。
それから何年も経ってからJavaを学び、GoFという人たちを知り、デザインパターンのSingletonを学び、ようやく点と点がつながって線になった気がしました。
1回しかインスタンスを生成できないようにするのがSingletonの意図だとすると、正確にはこれはSingletonではないのかもしれません。しかし、1回しか値を代入できないってところが似ているナーと思い紹介しました。
-
前の記事
【ExcelVBA】図形を複製する 2023.05.19
-
次の記事
Excelで日本地図 2023.05.23