フォームにテキストボックスやらチェックボックスやらリストボックスやら、OKボタンやらキャンセルボタンやらを配置する。この際、テキストボックスの入力を8文字に制限したい。

この場合、テキストボックスのプロパティを変更し、MaxLengthを8とするのが一般的かもしれないし、が、あまり推奨しない。なぜなら、VBAのソースコードを追いかけてもその制限は見えないからだ。保守性が落ちる原因のひとつといってもいいだろう。


この場合は

・OKボタンが押された時にテキストボックスの文字列の長さをチェックする

・フォームにフォームの定義をVBAで設定するコードを書いておき、リリース前に実行しておく

のいずれかをお薦めする。


前者は画面と処理とを分離しようという考え方で、オブジェクト指向の言語で提唱されている方法のひとつである。チェックする処理も共通化できる。

後者はコードを可視化するためのものである。併せてタブ順なども指定するようにしておけば画面項目の追加や削除の時にも対応が早い。


・他人のコードをチェックするときの効率

・テスト項目をプログラムから抽出するときの漏れを防ぎやすい

・保守性が上がる

・ソースの検索の対象になる

などのメリットもある。


ただ、これにはごく小規模なものであれば不要だと反感を覚える方もいらっしゃるだろう。そこは臨機応変に、しかしやり方だけはきちんと決めておくことで保守性は確保するよう考えておく必要がある。


※本当は半角で書きたいのだが、サイトによっては文字化けするので ¥ を大文字表記にしています。

¥ はコンピュータの世界ではかなり特殊な文字である。C言語でも ¥n など、結構特殊ワードである。


VBAの中でも ¥ はちょっと特殊である。といっても " (ダブルクオート)ほどではないかも。

ダブルクオートは基本的にリテラル文字を書くためのもので、 A = "あほんだら" とかいうように使う。が、「文字列の中でダブルクオートを使いたい場合は?」というと、「リテラル文字内でのダブルクオートは二つ続けて使う」と言うルールがある。例えば " という一文字を変数に入れるには A = """" となるのだ。


基本は ¥ もリテラル文字内では二つ続けて使うという原則があったはずなのだ。すなわち、Cドライブの WORK というフォルダにある AAA.txt というファイルにアクセスするなら "C:¥¥WORK¥¥AAA.txt" と書かなければならなかった。

なぜ過去形か?最近は「一つでも認識してくれるみたい」ということに気付いたからだ。すなわち "C:¥WORK¥AAA.txt" でもOKなのだ。


OSによるのか、Excelのバージョンによるのか、それは検証ができていない。分かったらレポートしたいと思う。




Excelで作成したアプリケーションに、どのような機能を実装するか、というのは設計時に決められるが、その際にExcelの機能をどこまで許可するのか、逆にいえば何を制限するのかを考慮する必要がある。

そうすることで詳細部分の仕様をより明確化できることになるのである。


・保存を許可するのか。

・オートフィルタは許可するのか。

・シートの保護はどのレベルで実施するのか(バージョンによって異なる点に注意)。

・アプリケーションの起動方法/終了方法はどうするのか。

・ショートカットキーおよびツールバーやメニューバーのどの機能を提供するのか。

・ツールバー/メニューバー/ポップアップのメニューをどのレベルで制限するのか。


などの方針を決めてゆくことになる。