さて、AccessのMDE形式で保存したコードを作成する場合の注意点がある。Access2003で、それ以降は変わったか確認していないが・・。
共通モジュールを作るなら、折角だからClassモジュールにしておきたいが、一般的なクラスモジュールの利用方法はできない。
どういうことかというと、Classモジュールには Instancing というプロパティがある。値は
・1- Private
・2- PublicNotCreatable
のどちらかを設定できる。いや、この2つのどちらかしか設定できないのだ。
1- Privateを選択する
該当するMDEファイル内の Private クラスとなる。つまり、このクラスには直接外部からアクセスすることはできないし、オブジェクトブラウザにも出てこない。
2- PublicNotCreatableを選択する
オブジェクトブラウザには表示される。しかし、該当するMDEファイル内でインスタンスを生成することはできるが、外部ファイルからクラスを生成できない。
そう、せいぜい「Staticなものを作ったから利用して」という用途くらいにしか利用できないのだ。標準モジュールでラップするという手を使えば外部からもコントロールできるはずなので、関数名を長ったらしくして「それ」と分かるようにする等の手で実現は可能だろう。
しかし、もう少しいいやり方がないかな、と模索してみたい。アレを試そうか、というのは、あるので、試したらまた書くかも知れない。
共通モジュールを作るなら、折角だからClassモジュールにしておきたいが、一般的なクラスモジュールの利用方法はできない。
どういうことかというと、Classモジュールには Instancing というプロパティがある。値は
・1- Private
・2- PublicNotCreatable
のどちらかを設定できる。いや、この2つのどちらかしか設定できないのだ。
1- Privateを選択する
該当するMDEファイル内の Private クラスとなる。つまり、このクラスには直接外部からアクセスすることはできないし、オブジェクトブラウザにも出てこない。
2- PublicNotCreatableを選択する
オブジェクトブラウザには表示される。しかし、該当するMDEファイル内でインスタンスを生成することはできるが、外部ファイルからクラスを生成できない。
そう、せいぜい「Staticなものを作ったから利用して」という用途くらいにしか利用できないのだ。標準モジュールでラップするという手を使えば外部からもコントロールできるはずなので、関数名を長ったらしくして「それ」と分かるようにする等の手で実現は可能だろう。
しかし、もう少しいいやり方がないかな、と模索してみたい。アレを試そうか、というのは、あるので、試したらまた書くかも知れない。