業務アプリケーションをExcel + VBA で構築する際の限界(その1)
・書式4000 問題
まぁ、上記問題はVBAは特に関係ないのだが。
書式4000問題とは、Excel 1ブックに対する書式パターンの数が4000に制限されること。
書式パターンとは、セル書式の組み合わせのことで、フォント・罫線・背景色など。
ブックがこのパターン数を保持している様子で、4000を超えたことに気付かず作業を行って、
次回ファイルを開くと書式がぶっ飛んで壊れているとても怖い現象。
作成時だけの問題と思いきや、VBAでセルの保護を操作するなど、
アプリケーションとして動的に書式を変更する場合、その最大値を押さえておく必要がある。
VBA実行時に、4000書式を超えると実行時エラーとなる。
また、この書式数を明確にカウントする方法が(自分のなかで)確立していないので、
管理できない状況にある。
現状、別に4000書式を保持したブックを用意しておき、VBAで対象ブックに1つづつカウントしながらコピー。
例えば1600コピーできたから、現在の書式は2400だねっという状態。
試行錯誤を行った結果、上記に落ち着いたのだが一応考えた方法を記しておく。
1) VBAでFindFormat を使用して書式を検索
この方法だと、まず検索する書式パターンを指定する必要がある。この書式パターンが曲者で、
影響する書式の最大が必要だと思った。基本的に「セルの書式設定」ダイアログ上で指定可能
な書式が影響すると考えられたが、リンクの挿入※でも書式数が変動することが分っていた。
これで全てだという明確な仕様が確認できなかったため、この方法はあきらめた。
※リンクはどうも下線とフォントパターンで書式数をカウントされているようだ。
2)ブックをXMLで保存してStylesタグの子要素Styleの数をカウント
一応現在採用している方法と近い数値が取れたのだが、やはり明確な仕様を確認できなかった為
不採用となる。