- ベストアンサー
VB5 SP3、Spread2.5J環境で実行時エラー
OS:WinXP PRO SP2、WinNT SP6 他 VB:5.0 SP3 SPREAD:2.5J (1998/07/25) 上記環境で作成したプログラムがあります。 プロジェクトの構成は、検索画面、メイン画面、コード検索用子画面と いった画面があり、それぞれにスプレッドを使用しています。 メイン画面のスプレッドは、行が取引先、列が商品のマトリックスに なっていて、検索したデータによって、コンボボックス型や、 チェックボックス型のセルが作られ、背景色もセル毎に変更されます。 複雑な請求書のプログラムですので、EXEのサイズや、メモリ使用量などは、 結構なものなのですが、最近までは問題なく動作していました。 その状態から、取引先毎に小計行を追加したり、実績数が未入力の行を 非表示にするコンボボックスを追加する仕様変更を行い、普通に使う分には 問題なく動作しています。 しかし、3,500行程度のデータを表示して、下の方の取引先の実績数を 入力後、実績数未入力のデータを非表示にした場合、下記の3つのエラーが エラートラップに関係無く表示され、VB(or EXE)が終了することがあります。 同じ処理をしても、現象が出る時と出ない時があります。 1.実行時エラー '-2147417848(80010108)' 'Action'メソッドは失敗しました:'_DSpreadSheet'オブジェクト (※ReDrawの場合もあり) 2.問題が発生したため、Visual Basicを終了します。 3.vb5.exe-アプリケーションエラー "0x76992d36"の命令が"0xf3011ad6"のメモリを参照しました。 メモリが"read"になることはできませんでした。 GrapeCity社のサイトや、他のHPでも検索したのですが、同様の現象が 見当たらず、メモリ使用を極力抑えたロジックに変更してみたりも したのですが、全く状況が変わらず困窮しております。 OSをインストールし直しても同じです。 同様の現象が出た方はいらっしゃいますでしょうか? また、対処方法を御存知の方がいらっしゃいましたら、御教えください。 よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#解決方法ではありません。 > 1.実行時エラー '-2147417848(80010108)' > 'Action'メソッドは失敗しました:'_DSpreadSheet'オブジェクト > (※ReDrawの場合もあり) で発生すると言うことは、SPREAD 2.5Jを操作した時に発生するんですよね? #SPREADの外で、直接APIを使用しているわけじゃないんですよね? ちなみに、実行してている「Action」は何なんでしょうか? #ひょっとして印刷とか? だとすると、 > 3.vb5.exe-アプリケーションエラー は、どうしようも無いと思いますよ。 多分、SPREAD自身が原因で、SPREADを直さないと駄目なんでしょうけど、 バージョン2.5Jのサポートは、何年も前に終わってますからね。 > GrapeCity社のサイトや、他のHPでも検索したのですが、同様の現象が > 見当たらず、メモリ使用を極力抑えたロジックに変更してみたりも > したのですが、全く状況が変わらず困窮しております。 その機能は使用しない様にするか、 SPREADのバージョンアップを検討した方が良いと思いますけど・・・ ちなみに私は昔、 VB6+SPREAD2.5Jで作成し、WinNT4で問題なく動作してきたプログラムが、 OSをWin2000に変更したら、特定プリンタに対する印刷で アプリケーションエラー発生するようになった事があります。 何ヶ月(掛かりきりってわけじゃないですけど)か調査や プログラムの手直しをやっても対処できなかったため、 結局、SPREADの印刷機能を使用するのはあきらめて、 Lineメソッド等で、SPREADそっくりに印刷するように修正しました。
その他の回答 (1)
- gungnir7
- ベストアンサー率43% (1124/2579)
典型的な領域侵害だと思います。 参照不可の領域に書き込もうとすると問答無用でVBはおちます。 当然メモリはreadになることができませんです。 bitbltやcopymemoryなどの転送命令を中心に調べてみて下さい。 当方でも昨日同じ現象が発生しましたが、 型宣言のミスでアドレスが想定外のものが渡っていたのが原因でした。
お礼
回答ありがとうございます。 bitbltやcopymemoryは、WindowsAPIの関数のことでしょうか? あいにく、当方は恥ずかしながら、WindowsAPIの知識に乏しく、 メモリのアドレスを調べることすらままなりません。 Spreadを使ったcopymemoryの簡単なサンプルソースがあれば、 大変助かるのですが、こちらで調べるようにします。 ただ、ソースコードが古く、型が不一致でVBにお任せしてる部分も 多々あり、もしかしたら、gungnir7様と同じような理由かも しれませんので、型を合わせて、文字列も固定長にする等、 型宣言の部分を調査してからにしようと思います。 ありがとうございました。
お礼
回答ありがとうございます。 > で発生すると言うことは、SPREAD 2.5Jを操作した時に発生するんですよね? > #SPREADの外で、直接APIを使用しているわけじゃないんですよね? そうですね。 コンボボックスの値が変更されたら、スプレッドから該当する行を非表示に するユーザー関数を呼び出していて、その関数内ではAPIは操作しておりません。 > ちなみに、実行してている「Action」は何なんでしょうか? > #ひょっとして印刷とか? 印刷ではないですね。 当方では、印刷は VsView などを使ったり、Excelで出力したりしています。 Actionで行っている処理は、SS_ACTION_ACTIVE_CELLで、セルを選択するコマンドです。 しかし、質問の部分に記入したように、ReDraw や、RowHidden の場合もあり、 処理が安定していません。 ただ、処理は違えども、この現象も dsuekichi様と同じような感じがするので、 普通に調査や改修を繰り返しても、時間だけが過ぎて解決までは至らないかも しれません・・・。 しかし、請求書ですので、あまり躊躇もしてられませんので、当方としても、 機能縮小や、Spreadのバージョンアップを念頭に入れて、もう少し頑張ってみます。 ありがとうございました。