「セルごとにサブルーチン呼び出し」メソッド のバグを修正しました

Pocket

「セルごとにサブルーチン呼び出し」メソッド のバグを修正しました
「セルごとにサブルーチン呼び出し」メソッドのバグを修正しました

今回の主題のプログラムの実行結果画面

"セルごとにサブルーチン呼び出し" の 実行結果
“セルごとにサブルーチン呼び出し” の 実行結果

今回、議題にしている日本語VBAプログラムの期待する実行結果の画面は上図のようになります。

バグの出ていたプログラムと原因

バグの出ていたプログラムの日本語VBAコードは以下のようなコードです。

上記のうち、

が、バグで動作していませんでした。

原因はアドイン側で、サブルーチン”月埋める”の存在するワークブック名がわからなかったためです。

そのため、”月埋める”を呼び出すことができていませんでした。

また、その直接の原因は、日本語VBAのデバッグを、アドイン内部の日本語VBAコードで行っていたためです。

ver0.12までアドイン側でデバッグを行っていました。

しかし、アドインの外側では今回のような問題や、ver0.13の時に出ていた「数値クラス」や「文字列クラス」がアドインの外で生成できないバグなどが出るのに、アドイン側だけでデバッグ・テストしてもエラーとならず、デバッグできない、という問題がありました。

対策

そこで、現在ベクターに公開申請中のver0.13では、”月埋める”などのサブルーチンが、「現在のワークブック」に存在するものと仮定して、”月埋める”などのサブルーチンを呼び出すことにしています。

そのため、下記日本語VBAのコードは、ver0.13では動作しますし、動作確認済みです。

また、「セルごとにサブルーチン呼び出し2」というメソッドで、第1引数に、「ワークブック名 & “!” & サブルーチン名」を指定して、ワークブック名を直接指定できるようにもしています。

「g_道具.ワークブック名(False) 」の箇所は適宜、「WorkBook(2).Name」や、「WorkBook(“商品データ”).Name」など、ご自分のワークブック名に置き換えられてください。

「g_道具.ワークブック名(False) 」はそのままでは、「現在使っているワークブックの名前」である「ActiveWorkBook.Name」を返します。

結論

今回のバグを反省し、

  • デバッグは、アドイン側で行うことはせず、「サンプルコード.xlsm」などアドインの外側で行う。そのことでよりユーザー側での使用に寄ったデバッグができる。

ということを行うことにします。

なお、上記バグを修正した「エクセルVBA日本語化」ver0.13 beta バージョンは、以下のURLからダウンロードできます。