• ベストアンサー

EXCEL VBA UserFormで困っています。

現在VBAで業務用のシステムを開発しているのですが以下のような現象が起こります。 開発環境  WinXP , EXCEL2000 現象(1) 起動すると『問題が発生したため、  Microsoft Excel Windowsを終了します。・・・ エラー報告を送信する 送信しない』のメッセージが出て起動できない。 UserForm.Showのステップで一旦止めてステップモードで続行すると正常に動作します。 現象(2) WinXP , EXCEL2000で正常に動作するものを WinXP , EXCEL2003で起動すると『パス名が無効です』のメッセージが出て起動しません。 (1)と同様にUserForm.Showのステップで一旦止めてステップモードで続行すると正常に動作します。 2点とも UserForm.Show のステップに問題があると思うのですが、自分なりに半月かけて調査しても何の解決の糸口も見つからずに困り果てています。 もし、ご存知でしたらご教示願えないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。Wendy02です。 >また、ステップモードで、継続して行くと、最終ステップ迄エラーも無く進んで終了してしまいます。 私の書き間違いでした。ブレークポイントを設けることです。 たぶん、起動からだと、 コードの中に、  Stop と入れたほうがよいかもしれません。 それを少しずつ、移動させて限界値を探していきます。そして、問題が発生する場所を探しますが、DataObject = Form Object Library ですと、もしかすると、最初からかもしれませんね。 その場合は、UserForm自体の起動をワンテンポずらすために、 標準モジュール側の  Auto_Open() にUserForm.Show を入れて、ThisWorkboook_Open 側には、それは書かないようにしてあげます。 もし、これで不都合があれば、また指摘してください。

FutottaOjisan
質問者

補足

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

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 追伸です。#1さんのおっしゃっている話を読み直して、私も、一応、そのハング状態をもう少し、詳しく知っておいたほうが良いかもしれないと思いました。もしかしたら、私の知っているハング状態と思い込んでいたものと違ったとしたら、私の早合点になってしまいますからね。 一応、私のイメージは以下のように考えています。 Excelの本体(Excel.Exe) →アドイン/Personal.xls →固有のブックの-Forms Object Libraryなど→ThisWorkbookのイベント→標準モジュールのAuto_Open →UserFormの立ち上げ という順序だと思っています。そうすると、途中で、重複的にその領域を確保しようと動いている可能性がありますね。もしかしたら、起動時、すぐにはUserFormの コントロールの領域を短時間では確保できないのか、と想像しています。 私の場合、よく、あるブックの立ち上げ時に、Internet Control のオブジェクトが確保できないことがありますが、いきなりOpenイベントで、オブジェクト生成というようなことはしませんので、単に、動かないなってだけで済んでいます。 >現在VBAで業務用のシステムを開発して  これは、あくまでも、私個人のプログラミング・スタイルなのですが、その起動時のコードの部分だけを、新しいブックで、新たに作ってみるという方法を取りますね。今あるものを何とかしようとすると、どんどん深みにはまってしまいます。その上で、調子がよければ、プログラムを移行していきます。私の感覚では、半月はもう限界のような気がします。場合によっては、解決策の1つの目処として、『ワトソン博士』を試されてもよいかもしれません。 それと、やっぱりあるレベル以上の人にとっては、#1 さんのご意見は必須なんですね。自分はわからなくても、エラーデータ自体が必要なんです。そのエラーデータをもとに、MSのサポートとGoogle検索します。だいたいは海外のデータになりますが、ある種の傾向が得られます。

FutottaOjisan
質問者

お礼

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

FutottaOjisan
質問者

補足

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

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 この前、ここのカテゴリで、Excel Application本体を出さずに、UserFormを終了する時に不明のエラーが出るという話に、良く似ています。 最初に、「起動する」の「起動」は何を意味していますか? Excelのアプリケーションと共に起動なのでしょうか?UserForm単独なのでしょうか?だいたい、システム開発の場合は、前者のモードで作るのが常なのですが。 もし、そうでしたら、UserFormのDataObject コントロールを確保せずにモードに入れば、(1)も(2)の現象もありえますね。 >UserForm.Showのステップで一旦止めてステップモードで続行すると正常に動作します。 もう既におやりになっているかもしれまんせが、一度、ステップモードの、どこまでに問題が発生するか、煮詰めたほうがよいと思いますね。 そして、そのUserFormの起動のどこかで、OnTimeメソッド(Waitではダメです)で、わずかですが、時間差を設けてあげるか、イベントで占有されているところに、一旦オペレーティングが可能なように DoEvents を設けることぐらいしか、今のところ思いつきませんね。

FutottaOjisan
質問者

補足

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

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.1

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

FutottaOjisan
質問者

お礼

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

FutottaOjisan
質問者

補足

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

関連するQ&A

  • EXCEL VBA UserFormで困っています。

    EXCEL VBA UserFormで困っています。 VBAプログラミングで以下のような現象が起こります。 開発環境  WinXP , EXCEL2003 ブックを起動するとメニューが表示され、そこからボタンを押すとuserform1が表示されるというプログラムなんですが、そのボタンを押してuserform1を起動しようとすると『問題が発生したため、  Microsoft Excel Windowsを終了します。・・・ エラー報告を送信する 送信しない』のメッセージが出て起動できない。 UserForm1.Showのステップで一旦止めてステップモードで続行すると正常に動作します。 過去に似た質問を見つけ、そのアドバイスを元に以下を試してみました。 http://okwave.jp/qa/q2001805.html ・エラーの発生行の特定 userform1.showの前に、userform1.label.visible=falseのように、表示、非表示を切り替える命令を出しており、どうやらその表示命令の行でつまづいている事がわかりました。 表示命令を全て消去し実行したところ、現在までは問題なく起動できています。 ・on timeメソッドで時間差をつける ラベルやボタンの表示、非表示命令行をまとめて、 Application.OnTime Now + TimeValue("00:00:01"), "ラベルボタン表示設定" userform1.show といった形で時間差をつけてみました。 結果として、userform1自体は立ち上がるようになったのですが、時間差で実行される"ラベルボタン表示設定"の実行時に「オートメーションエラーです。起動されたオブジェクトはクライアントから切断されました。」と出てくるようになってしまいました。 ラベルはまだ良いのですが、コマンドボタンの表示、非表示は、誤操作を防ぐ手段として非常に重要です。なんとかエラーを出さずにコード通りに起動する方法はありませんでしょうか。

  • Visual BasicのUserFormが閉じづらい

    Excel2000,VisualBasicのUserFormの閉じ方で困っています。 マクロ起動中にUserForm1.Show,UserForm1.Hide,UserForm2.Show,UserForm2.Hideを 何度も繰り返していると、同じUserFormが重複してメモリーに残っている 状態で、閉じるために「×」を何度もクリックしています。 作業を長時間するとフリーズ状態もしくはエラーになります。 尚、Load.Unloadでも同じ結果になりました。 どなたか解決方法を教えてください、宜しくお願いします。

  • Excel VBA ブックが閉じれない

    Excel2016を使用してVBAを使用しています。 VBA初心者ですが、よろしくお願いします。 質問内容は以下になります。 EXCEL起動と同時にUserFormを表示させ、UserForm上のコマンドボタンから ダイアログボックスを表示し、他ブックを開く処理なのですが、 他ブックを開くまでは問題ないのですが、他ブックが閉じれない状態になります。 Private Sub Workbook_Open() UserForm1.Show End Sub Private Sub UserForm_Initialize()  各種処理 End Sub Private Sub CommandButton1_Click() Dim OpenFileName As String SetCurrentDirectory (Worksheets(1).Cells(11, 3)) OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") Workbooks.Open OpenFileName End Sub UserFormを閉じると開いたブックも閉じることが可能です。 タスクマネージャーから強制的に終了しようとすると、以下メッセージが出ます。 ”開いているダイアログボックスがあるため、Microsoft Excel を終了できません。[OK]をクリックしてから、Microsoft Excelに切り替えてダイアログを閉じて下さい。" UserFormを閉じないで他ブックを閉じるには、どうすれば宜しいでしょうか。 申し訳ございませんがご教授下さい、よろしくお願いいたします。

  • Excel VBA: UserForm.Show で実行時エラー

    たびたびお世話になります。 結構大きなフォームを作成して、ようやく開発が終了したのですが、ある時を境に急にフォームを表示しようとすると実行時エラーになります。  Microsoft Visual Basic  -------------------------------------------------------------  実行時エラー'-2147417848 (80010108)':  'Value' メソッドは失敗しました 'IMdcOptionButton'オブジェクト このあと、ご迷惑をおかけします、現象を Microsoft に報告しますというメッセージが出ます。 いつもメッセージは一緒です。 不思議なことに、Excel を起動し、Alt+11 で VBE を起動し、フォームを開発用に開き、再生ボタンをクリックしてフォームを表示させると、無事表示されます。 一度無事に表示されると、いつもやっているようにマクロから Show で表示しても表示されます。 これも必ず再現されます。 どうすれば回避できるでしょうか。 何かわかればよろしくお願いします。 OS は Windows XP SP2、 Office は 2007 (12.0.6331,5000) SP1 MSO (12.0.6333.5000) です。 ここまで苦労して開発してテストして、さっき顧客にできたからいまから送ると言ったのに泣きそうです :-(

  • Excel vbaでフォームの起動が失敗する

    Excelシート上に設置したユーザフォームを開くボタンを実行するとフォームが開かずに新規のExcelシートが開いてしまいます。 以前までは正常に作動していたんですが••• ちなみにボタンの実行前に vbaの編集画面を一度でも開いた後はボタンを押したら正常にフォームが開くんです。 フォームを開くコード sub 起動() UserForm1.Show End Sub フォームのInitializeはコンボボックスのみです。 原因がわかりましでしょうか?

  • EXCELの起動時のトラブル

    EXCELを立ち上げると、タスクバーに、現在起動しているアプリケーションソフトの一覧に、”Microsoft Excel-Book1"の他に"GDI+ Window"という表示が出ます。そのまま、ブック自体の保存はできるのですが、次回起動時に、 「Excelは前回正常に起動できませんでした」というメッセージが出て、セーフモードでの起動を促してきます。一度セーフモードで起動すると、一旦終了した後に再起動しても正常に起動するのですが、XPをシャットダウンして、Excelを起動すると、同じ現象が再現します。PCの環境は、OSはXPホームエディションのSP2、CPUはPentium4 1.70GHz、メモリは256MBです。この現象の理由、解決法など、ご教示の程、よろしくお願いします。

  • エクセルが起動しない

    VistaでExcell2007を使っています。最近突然発生した現象です。エクセルを起動させようとすると、「前回正常に起動しませんでした。セーフモードで起動しますか?」と出るので、「はい」としてもメッセージが消えるだけで何の変化もない。もう一度エクセルを起動すると、「セーフモードで起動できません。自動修復を開始しますか?」と尋ねるので、「はい」とすると「WindowsでMSPersonal2007を設定しています」というメッセージが出て、かなりの時間がたってから「セットアップが正常に終了しました」と出る。しかし、このままではエクセルは同じ現象が出て立ち上がらない。PCの再起動をかけてようやく正常に作動する。電源をオンにしてPCを立ち上げると毎度こういう現象です。 因みに、エクセルの立ち上げ異常時に、デスクトップ上やメモリ上からエクセルファイルを開こうとすると、「ファイルが見つかりません。確認してからやり直してください。」と出る。

  • VBAのエラーについて

    エクセル2007 でマクロのコードを書いています。 開発画面からマクロを実行するとうまくいくのに、エクセルのシートに配置したボタンにそのマクロを登録して実行するとエラーが出てしまいます。 標準モジュールに UserForm1.showを書いており、UserForm1上に配置したコマンドボタンによってUserForm2を表示させているのですが、UserForm2が出る前に、「問題が発生したために、Microsoft Office 2007 Excelを・・・・・・」というような画面が出て強制終了されます。(UserForm1、UserForm2とも modelessで表示しています。) また、開発画面から1度実行すれば、シートに配置しマクロを登録したボタンからでも実行できるようになるのですが、一度、そのブックを保存してから改めて開くと、同じような症状が出てしまいます。 UserForm2のInitializeに問題があるのだと思い、そこのコードをじっくりと見た結果、UserForm2にあるPageの中に配置した特定のComboBoxとCommandButtonに関する処理を非表示にするとエラーが出ないことが判明しました。しかし、それらについての処理は、他のComboBoxなどと同じ処理(セルの値を読み込むような)をしているもので、名前などのミスもありません。(というか、開発画面からの実行では正常に動きます。) ただ、共通していることとしては、そのエラーが出る特定のComboBoxとCommandButtonは、最後の最後で思いついて配置したものであるということだけなのです。  ずっと、いろいろな方向から試しているのですが、わかりません。複雑な説明で申し訳ないのですが、なにかしら情報をお願いします。

  • Excel 2002 を Win10 で使いたいが

    WinXP では正常動作するが、Win7 では動作保証されていない Excel 2002 を、私は Win7 に Windows XP Mode をインストールして、その配下に Excel 2002 をインストールして快適に利用していました。 さて、Win10 上で Excel 2002 を正常に使える方法は存在しないものでしょうか? Win10 でも Win XP Mode もどきのソフトがあれば好いのですが…

  • エラーメッセージ(ディスクをドライブ\Device\Harddisk1\DR2に挿入してください)

    よろしくお願いします。 OSは WinXP Pro SP2 です。 普通にOSを起動して「Spybot1.3」「Ad-Aware SE 1.05」でスキャンすると正常にスキャンできるのですが セーフモードでスキャンすると どちらとも下記のようなメッセージが繰り返しでます。 ------------------------------------------------- ディスクがありません × ドライブにディスクがありません。ディスクをドライブ \Device\Harddisk1\DR2 に挿入してください。 ------------------------------------------------- キャンセルボタンや 続行ボタンをクリックしても このメッセージが繰り返し出てきます。 アンインストール後に 再インストールしても解決しません。 Ad-Aware 6.0 のときには セーフモードでも正常にスキャンできていました。 他のアプリケーションは全く問題なく動作しています。   SP1のときからのエラーメッセージですので SP2が原因ではないと思います。 なにが原因かわかりません。 よろしくお願いします。

専門家に質問してみよう