VBAで帳票を作成しています。
15票ぐらい作成していますが、
ある帳票のみ
EXCEL のページ違反です。
モジュール : MSO97.DLL、アドレス : 0157:30708e0a
Registers:
EAX=02315cfc CS=0157 EIP=30708e0a EFLGS=00010216
EBX=fffffab0 SS=015f ESP=0062d034 EBP=0062d0b4
ECX=3ffff9eb DS=015f ESI=02316ff8 FS=19ef
EDX=fffffab0 ES=015f EDI=02317000 GS=0000
Bytes at CS:EIP:
というエラーを吐き出します。
VBAについて詳しくわからないのでこのような
現象が起きる理由と解決策がありましたら教えて頂けないでしょうか?
VBAでメモリをいじるような処理をしてないなら、
(たぶんしてないでしょう。もしそれができる技術力が
あれば、この手の問題には自力であたるでしょうから)
原因はアプリケーションか、OSか、アプリが利用している
OCX/DLLか(あるいはそれらの組合せ)にある可能性が高いです。
直接の原因は「書いてはいけないメモリの書こうとしたか、
読んではいけないメモリを読もうとした」なんですが、
本当の原因の特定は難しいでしょう。
そこで、解決策ではありませんが、「やらないよりまし」
なことを書いておきます。
まず、あてそこなったパッチ、サービスパックがありましたら
あててください。
次に、
スワップの多発でページ違反の確率は大きくなりますので、
メモリを増設する、とか 不要なWindowは閉じる、とか
帳票のメモリサイズを小さくする(具体的には、貼り付けている
オブジェクトを減らすとか、フォントを減らすとか、)
とかでおさまることがあります。
あと、OSとアプリはできるだけ同時期の組合せで
使用したほうが不具合が少ない可能性が高いです。
Win95 + OfficeXP とか、WindowsXP + Office95 とか、
たとえできると言われても、組み合わせたくないですね。
Win95 + Office95 , Win98 + Office97 ,
Win2000 + Office2000 , WinXP + OfficeXP とかいうのが
無難なんでしょうね。
(NTはSPで大きく変わるのではずしてます)
実をいうとIEやIME,入っているならVisualStudioの
バージョンも重要なのですが、
言い出したらきりないですね。
ありがとうございました。
非常に勉強になりました。
こういうエラーはやはり原因特定難しいですよね。
VBAは便利な反面、こういう点で
怖さがある事がわかり勉強になりました。
本当にありがとうございました。