プロが教えるわが家の防犯対策術!

現在VBAで業務用のシステムを開発しているのですが以下のような現象が起こります。

開発環境  WinXP , EXCEL2000

現象(1) 起動すると『問題が発生したため、  Microsoft Excel Windowsを終了します。・・・ エラー報告を送信する 送信しない』のメッセージが出て起動できない。
UserForm.Showのステップで一旦止めてステップモードで続行すると正常に動作します。

現象(2) WinXP , EXCEL2000で正常に動作するものを WinXP , EXCEL2003で起動すると『パス名が無効です』のメッセージが出て起動しません。
(1)と同様にUserForm.Showのステップで一旦止めてステップモードで続行すると正常に動作します。

2点とも UserForm.Show のステップに問題があると思うのですが、自分なりに半月かけて調査しても何の解決の糸口も見つからずに困り果てています。
もし、ご存知でしたらご教示願えないでしょうか?

A 回答 (4件)

こんばんは。

Wendy02です。

>また、ステップモードで、継続して行くと、最終ステップ迄エラーも無く進んで終了してしまいます。

私の書き間違いでした。ブレークポイントを設けることです。
たぶん、起動からだと、
コードの中に、

 Stop

と入れたほうがよいかもしれません。
それを少しずつ、移動させて限界値を探していきます。そして、問題が発生する場所を探しますが、DataObject = Form Object Library ですと、もしかすると、最初からかもしれませんね。

その場合は、UserForm自体の起動をワンテンポずらすために、

標準モジュール側の
 Auto_Open()
にUserForm.Show を入れて、ThisWorkboook_Open 側には、それは書かないようにしてあげます。

もし、これで不都合があれば、また指摘してください。

この回答への補足

Wendy02さん ご教示有難う御座います。
標準モジュール側のAuto_Open()にUserForm.Show を入れて、ThisWorkboook_Open 側にはそれは書かないという方法をやってみましたが結果は同じでした。
今夜、Stop を入れて限界地を探す方法でやってみようと思います。
駄目な場合はまた質問させて下さい。

補足日時:2006/03/03 07:13
    • good
    • 0

こんにちは。



追伸です。#1さんのおっしゃっている話を読み直して、私も、一応、そのハング状態をもう少し、詳しく知っておいたほうが良いかもしれないと思いました。もしかしたら、私の知っているハング状態と思い込んでいたものと違ったとしたら、私の早合点になってしまいますからね。

一応、私のイメージは以下のように考えています。

Excelの本体(Excel.Exe) →アドイン/Personal.xls →固有のブックの-Forms Object Libraryなど→ThisWorkbookのイベント→標準モジュールのAuto_Open →UserFormの立ち上げ

という順序だと思っています。そうすると、途中で、重複的にその領域を確保しようと動いている可能性がありますね。もしかしたら、起動時、すぐにはUserFormの コントロールの領域を短時間では確保できないのか、と想像しています。

私の場合、よく、あるブックの立ち上げ時に、Internet Control のオブジェクトが確保できないことがありますが、いきなりOpenイベントで、オブジェクト生成というようなことはしませんので、単に、動かないなってだけで済んでいます。

>現在VBAで業務用のシステムを開発して
 これは、あくまでも、私個人のプログラミング・スタイルなのですが、その起動時のコードの部分だけを、新しいブックで、新たに作ってみるという方法を取りますね。今あるものを何とかしようとすると、どんどん深みにはまってしまいます。その上で、調子がよければ、プログラムを移行していきます。私の感覚では、半月はもう限界のような気がします。場合によっては、解決策の1つの目処として、『ワトソン博士』を試されてもよいかもしれません。

それと、やっぱりあるレベル以上の人にとっては、#1 さんのご意見は必須なんですね。自分はわからなくても、エラーデータ自体が必要なんです。そのエラーデータをもとに、MSのサポートとGoogle検索します。だいたいは海外のデータになりますが、ある種の傾向が得られます。

この回答への補足

有難う御座いました。解決いたしました。
Stopで調べたところ、原因箇所(配列にラベルのCaptionを設定している場所)は特定できたのですが、ラベルを再作成してもステップを書き直しても駄目でした。
Wendy02さんの言われたOnTimeメソッドで時間差を設けたところ、(1)(2)共に一挙に解決いたしました。
これで明日からの業務に使用できそうです。
本当に有難う御座いました。

補足日時:2006/03/04 15:06
    • good
    • 0
この回答へのお礼

これで半月ぶりに熟睡できそうです。
30年前にCOBOLを組んだ事があり、面白半分でVBAに取り組み始めて約1年です。
大体の事が飲み込めたので業務用のシステムでも、と取り組んだのが今回の始まりでした。
57才になって久し振りの徹夜もしました。
遊びならともかく、業務用を作成するというのは考え物ですね。
やはり、若い人に任せようかなとチョッピリ弱気になっています。
でも貴方のように親身になって教えて下さる方がある以上、自分が使う分だけでもとも考えています。
何はともあれ、本当に有難う御座いました。

お礼日時:2006/03/04 15:34

こんにちは。



この前、ここのカテゴリで、Excel Application本体を出さずに、UserFormを終了する時に不明のエラーが出るという話に、良く似ています。

最初に、「起動する」の「起動」は何を意味していますか?

Excelのアプリケーションと共に起動なのでしょうか?UserForm単独なのでしょうか?だいたい、システム開発の場合は、前者のモードで作るのが常なのですが。

もし、そうでしたら、UserFormのDataObject コントロールを確保せずにモードに入れば、(1)も(2)の現象もありえますね。

>UserForm.Showのステップで一旦止めてステップモードで続行すると正常に動作します。

もう既におやりになっているかもしれまんせが、一度、ステップモードの、どこまでに問題が発生するか、煮詰めたほうがよいと思いますね。

そして、そのUserFormの起動のどこかで、OnTimeメソッド(Waitではダメです)で、わずかですが、時間差を設けてあげるか、イベントで占有されているところに、一旦オペレーティングが可能なように DoEvents を設けることぐらいしか、今のところ思いつきませんね。

この回答への補足

「起動」の意味は、このBOOKを立ち上げる事を言っています。
Workbook_OpenでUserFormのDataObject コントロールを確保した後にUserForm.Showのステップが続いています。
また、ステップモードで、継続して行くと、最終ステップ迄エラーも無く進んで終了してしまいます。
OnTimeメソッドやDoEventsは使った事が無いのですが、やってみます。

補足日時:2006/03/02 15:30
    • good
    • 0

>問題が発生したため・・


メッセージが表示された際にエラーダイアログボックスのリンク[エラー報告に含まれるデータの参照]をクリックしてエラー署名が表示されますよね。
App.exeにエラーの発生したプログラムのDLL等の実行可能ファイル名が入るのですが・・。
その辺はどうでしょうか。

この回答への補足

開いて見てはみましたが、未熟な私には何のことやらサッパリ分かりません。
せめてこのメッセージの見方が分かれば調べようも有るのですが・・・

補足日時:2006/03/02 15:25
    • good
    • 0
この回答へのお礼

おかげさまで解決いたしました。
VBAって面白いけれど、深みにはまると投げ出したくなりませんか?
貴方のような親切なアドバイザーが居られなければキットPCを蹴飛ばしていた事だと思います。
面白さとシンドさと、そして感謝を感じたこの3日間でした。
有難う御座いました。

お礼日時:2006/03/04 15:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A