Accessのプログラムを配布する場合に、勝手にプログラムを改変されないようにACCDEというファイル形式に保存(変換)すればよいというのでサンプルでやってみたら成功しました。
そこで、
注意ポイント
ちょっと大きなAccessシステムをACCDE形式に保存しようとしたら、ファイルが作成できませんというエラーで作成できませんでした。
今回はその対応の記録になります。
エラーメッセージから原因追及
「.accdeファイル、.mdeファイル、または.adeファイルを作成できませんでした。」
という警告メッセージが出て配布用ファイルが作成できませんでした。
ヘルプから内容を確認すると、
このエラーは通常、大きなデータベースを MDE ファイルにコンパイルする場合に起こります。データベースをコンパイルするのに、多くの TableID 参照がテーブルごとに作成されます。Access データベース エンジンでは一度に 2,048 までの空き TableID しか作成できません。テーブル、マクロ、フォーム、レポートなどの多くのオブジェクトを含むデータベースを MDE ファイルとしてエクスポートする場合に上限を超える可能性があります。
Access データベース エンジンでデータベースを MDE にコンパイルするときに使用される TableID の数を正確に推定することはできませんが、VBA モジュールとフォームでそれぞれ 1 つの TableID を使用します。そのため、データベースに 500 のフォームが含まれていて、それぞれのフォームの "HasModule/コード保持" プロパティに [はい] が設定されている場合には、1,000 の TableID が使用されることになります。
マイクロソフトの解説は本当に頭の良い人が作成しているため凡人の自分には理解できません。
具体的な解決方法を書いてほしいところです。
デバッグ>>コンパイルやって確認
VisualBasic画面から、デバッグ>>コンパイルをやってみました。
コンパイルエラーが出てきました!!
エラーも出ずに動いているのに、なんでコンパイルエラーがでるの!?
何気に親切に
自由なメモ
エラーの場所が選択された状態で指定
されています。
参考
指摘されているVBAのコードを見直してみると、フォームをコピーして使った為に、関係のないテキストボックスにフォーカスを合わせるような内容でした。
また、他の部分では、VBAコード自体が対象フォームでは使われてない状態でしたが、指摘された部分だけをコメントアウトしました。
コンパイルしてエラーが出なくなったので、再度ACCDEにて保存をしましたら、無事に保存できました。
ACCDE形式のAccessプログラム実行
ACCDE形式になったAccessプログラムですが、プログラムの編集ができない以外は何の問題もなく動きました。
ちょっとエラーが出た時は焦りましたが、これなら配布できますね。
あと、余談ですが、データベースの最適化・修復をするとファイルサイズが小さくなりますが、その処理を実行する前と後のACCDE変換したプログラムファイルの容量の変化はないようです。
つまり、ACCED変換する時には、最適化された状態で変換されているってことですかね。この辺のAccessの内部仕組みが分かってないので的外れかもしれませんが結果、容量の変化は無いという事です。