シートの制限(Excel95から97へのマクロ移行での注意)
 あるシートをコピーしつつデータを加工して、最終的には100シート
になるというマクロをExcel97で実行した所、95では問題なく動作していたのに
全シート数が64シートの所で一般保護エラーでExcelが落ちてしまう現象が
起きます。

 考えられる原因と対策を挙げてみましょう。

○シートのオブジェクト名(CodeName)がExcel97VBAの制限にひっかかっている。

 Visual Basic Editorのプロジェクトエクスプローラの左側に
シートのコード名が表示されます。このコード名の字数制限は31文字です。

 Sheet1をCopyメソッドでコピーすると、Excel上のワークシート名はSheet1(2)
となりますが、コード名は Sheet11 となります。

 さらにSheet1をCopyメソッドでコピーすると、Excel上のワークシート名は
Sheet1(3)となりますが、コード名は Sheet12 となります。

 この場合には問題ありませんが、コピーされたシートSheet1(2)をコピーすると
Excel上のワークシート名は Sheet1(3) となりますが、コード名は Sheet111
になってしまいます。

 そして、さらにSheet1(3)をコピーするとコード名は Sheet1111 になってしまいます。
 
 つまり、コピー元ではなくコピー先のシートに対してCopyメソッドを繰り返すと、
いずれはコード名が制限の31文字を越えてしまいます。

 もし、今回の不具合がこの予測に相当しているのであれば、

・コピー先のシートに対してCopyメソッドは使わない
・シートのコピーはやめて、新規作成したシートに
セル内容をコピー&ペーストする

 などの方法が考えられます。

○
 シートのコピー数が増えると、以下の@が間に合わず
Aが先に実行されていることも原因の1つに挙げられます。
 コピー元が分からずエラーとなってしまいます。
 解決策としては、@とAの間に、Doeventsを入れるなどが考えられます。

    Do While cnt < 100
        Sheets("帳票テンプレート").Select			・・・	@
        Sheets("帳票テンプレート").Copy Before:=Sheets(1)	・・・	A
        ActiveSheet.Name = cnt
        cnt = cnt + 1
    Loop

Excel97



戻る


Excel Word Access VBA! モーグ