エクセルVBAでフォームShow時にオートメーションエラーが発生する

このQ&Aのポイント
  • エクセルVBAで1つのフォームをShowする際に、突然「オートメーションエラー」というエラーメッセージが表示される問題が発生しました。
  • VBAのコードを開いているとエラーは発生しないため、問題の解決方法を探しています。
  • ファイルの名前を変更するなどの対策も試しましたが、解決していません。
回答を見る
  • ベストアンサー

エクセルVBA フォームShowでオートメーションエラー

いつもお世話になっております。 コントロールを使用するのが初心者で、皆さんに助けられています。 ありがとうございます。 たびたびの質問で申し訳ありませんが、よろしくお願いたします。 今までは出なかったのですが、つい先ほどから、 1つのフォームをshowすると「オートメーションエラー」が 発生してしまいます。 しかし、一度、VBAのコードを開けると、エラーは発生しません。 調べては見たのですが、確実な解決法がなく、 下記の件の方はどのように解決されたのか教えていただきたいです。 http://oshiete1.watch.impress.co.jp/qa4383343.html​ いくつか有効な手段では、と自分で思う事を記述したいと思います。 (1)ファイルが壊れている可能性  a.VBAを全てエクスポートしインポートしなおす    →やってみましたが、ダメでした。  b.ファイルの名前を変える    →やってみましたが、ダメでした。 (2)showの使い方がおかしい  a.現在、showで出力し、unload Meで開放している状態です。 たびたびの質問申し訳ありません。 よろしくお願いいたします。

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

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

こんにちは。 >只今、ファイルを再作成し、すべてのエラーが出なくなりました!! それは、おめでとうございます。 >VBAは1000字以上記入たくさんしているのですが、問題なのでしょうか? ここらは、もうご承知のことだと思いますが、VBAは、VBとは違って、実際には、メモリ制限にぶつかることがあります。それで、大きなコードを書くとき、UserForm は、ローカルモジュール(オブジェクトを持っている)ですから、標準モジュール(オブジェクトを持っていない)に、逃がすように書いたほうが良いような気がします。 特に、1つのプロシージャは、あまり長く書かないほうがよいということです。(100行程度まで)パーツ・パーツでコードを作っていくということです。 また、標準モジュールも、その内容(例えば、文字列を処理する、インターネットにアクセスする)によって、モジュールを替えて、ひとつの標準モジュールの仕事は同じ系列の仕事にする、という暗黙のルールがあります。 >アドインについては、勉強不足でよくわかっていません。 アドインも本格的に勉強する、難しいです。詳しいのは、MSから出ている『プログラマーズガイド』なんていう本に出てきますが、私たちが知りたいのは古いバージョンの本にしか出てこないのです。(ブックオフなどの古本屋で、数百円で手に入ったりします。)本格的に作ると、細かな部分が、分からないことが出てきてしまいます。今のスタイルは、できるだけ、Office 97のVBAの資料を集めるとプラスになることが多いです。それ以降のものは極端に難しいです。Vista + Office 2007 でも、理屈は同じです。 >知り合いのために、ちょっと作ろうかなと思ったフォームでこんなに手こずるとは思ってもいませんでした。 私の場合は完成しなかったです。もう数年前に、掲示板ではほとんど解答ができたので、自由にできるつもりになっていたのでい。それで知り合いから仕事の依頼を請けて、しばらくやってみて、1週間では解決できないとわかったので、その時点で相手に、できない旨とお詫びを添えて連絡を入れました。今、されていることとは違うにしても、同じくUserFormが問題でした。その後、原因を見つけるのに、1年以上掛かりました。 なお、私は、だいたいは、丸3日で形にならなければ、できないにします。 何かのお役に立てれば幸です。

その他の回答 (2)

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

こんにちは。 全体的なコードの雰囲気は、アドインのようです。 > (1)多数あったコンボボックスをテキストに変更 →解決せず > Call com01_開始処理(a,b,c)  /使用するシートを表示し、マクロのみ変更可とする この2行の関連性はありますか?テキストボックス(コンボボックス)のRowSourceは、空になっているのですか? それと、文の最後の部分が気になりました。 >1000字以上でエラーになってしまうため、見づらくすみません。お礼もろくに書けずすみません。 ここに載せられない1000字というものも、実は、私は、削除覚悟で書いたことがあります。その時、ここに入ったけれども、それでも、かなり大きなサイズです。それは、いろんな問題が発生する可能性があります。 これについてのアドバイスとしては、まず、UserForm 自体に入れるものと、そうでないものは、きちんと区分けすることですね。それは、前回書いたメモリの配分の問題です。 ところで、実際に同じ立場の場合、経験としては、だいたい、2週間程度、いじっていて、解決しないと、その辺りを見切りだとして、最初から作り直すことをします。かなりレベルの高い問題を抱えている可能性があります。私自身が、同じように、どのようにもならないところに入り込んだことがあります。 確かに、コードを失うのはつらいのですが、このレベルになると、他人に頼るということもできないのです。原因の場所が特定できない場合、または特定できても、根本的にメモリの配分などがある場合は、やむをえないのです。ただし、同じパターンで書けば、同じハメに入ってしまうこともあるのですが。

yuri_12345
質問者

お礼

いつもありがとうございます。 只今、ファイルを再作成し、すべてのエラーが出なくなりました!! 本当にありがとうございます。 アドインについては、勉強不足でよくわかっていません。すみません。これから勉強いたします。 開始処理は、非表示されているシートを表示させているだけなので、フォームとの関連性はありません。 コンボボックスは、InitializeではClearせず、設定しているのですが、他の設定時には、必ずClearしてから設定しています(RowSourceプロパティの設定はありません) 1000字の件は、このお礼内容欄のことでした。すみません。わかりづらく書いてしまって。。。VBAは1000字以上記入たくさんしているのですが、問題なのでしょうか?ちょっと不安になってしまいました。 知り合いのために、ちょっと作ろうかなと思ったフォームでこんなに手こずるとは思ってもいませんでした。 Wendy02様のおかげでなんとか、終了できそうです。 本当にありがとうございます。 初めて作成したフォームだったため、修正等たくさんしてしまい、それのためにファイルが壊れちゃったのかな?という気がします。 これからはWendy02様のように回答ができるように頑張ります。 本当にありがとうございました。

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

こんばんは。 たぶん、リンク先は役に立たないと思います。 まあ、Focus している最中に、Hide したらエラーが出るでしょうね。(^^; >(2)showの使い方がおかしい > a.現在、showで出力し、unload Meで開放している状態です。 前回の話で、私は、別のことばかり書いてみました。他の方も書いていたように、ソースをまず見るべきでした。私の書いたメモリのことは、そんなに的外れではないにしても、つい余計なことばかり書いてしまいました。(自分がバカみたいでした) コードを見せていただけますか? リンク先の質問はきまった回答がありますが、#1コードでオートメーション・エラーが出ること自体は、興味深いです。解決もなにもありません。それ自体は使わなかったということですね。

yuri_12345
質問者

お礼

回答をいつもありがとうございます。今までの現象をまとめてみました。 1.コンボボックスに入力時強制終了   (1)多数あったコンボボックスをテキストに変更 →解決せず   (2)強制終了しないフォームをコピーして再作成 →解決(入力しても強制終了しなくなる) 2.IMEに問題ありかと思い、再度設定をZEROにして実行 →強制終了される <問題発生>   1.(2)にて再作成をしたユーザフォームを開くと「オートメーションエラー」が発生※但し、VBAのコードを開くと発生しない <対応考え中>   a.フォームの名前を変更 →解決せず   b.もう一度マクロを再作成 →対応中 =ソース= フォーム:全16個 エラーのフォーム:コンボボックス2個            テキスト2個            マルチページ5個              内にテキスト9個のフレームが5つ 標準モジュール Sub h01_納品書作成()   Call com00_名称取得(a,b,c)  /使用するシート名等を取得しています。   Call com01_開始処理(a,b,c)  /使用するシートを表示し、マクロのみ変更可とする   frm11.Show          /問題のフォームShow   Call com02_終了処理(a,b,c)  /使用するシートを非表示にし、保護 End Sub フォーム Private Sub UserForm_Initialize()   Call com00_名称取得     /使用するシート名等を取得しています。   Workbooks(mcr_fi).Activate    Worksheets(frm_sh).Select '最終行・列   Call com11_最終行列検索(a,b,c) /使用するシートの最終行の取得*3 'コンボボックス設定 'スクロール   MultiPage1.Value = 0   frm11.Scroll fmScrollActionBegin, fmScrollActionBegin 'フォーカス   txtNohDate.SetFocus End Sub Private Sub cmdCancel_Click()   Unload Me End Sub 1000字以上でエラーになってしまうため、見づらくすみません。お礼もろくに書けずすみません。

yuri_12345
質問者

補足

こんばんは。 回答のお礼が遅れてしまい、本当にすみません。 しかも、補足の欄ですみません。 実は、問題の2002のPCが現在、使えない状況でして。。。 (PC故障ではありません。ちょっと持っていかれてしまいました) 2~3日中には、もう一度今回の現象をまとめて、 ご報告したいと思っております。 本当に、親切に教えていただいているのに申し訳ないのですが、 こんな私も見捨てずによろしくお願いいたしますm(..)m いつもありがとうざいます。 次回はお礼の欄に書かせていただきます。

関連するQ&A

  • MSDEでオートメーションエラー

    環境:Ms Windows2000 sp1/Ms SQL Server2000/Ms Vb6.0/ ActiveReports Ver1.0J +Ver1.5J差分 上記の環境で作成したPGをMSDEの環境で実行したら「オートメーションエラー、起動したオブジェクトはクライアントから切断されました」のエラーが発生しました。 PGの内容は以下のとおり ・frmMainフォームから印刷範囲指定のfrmPrintをCALLし、 PrtRepというレポートを表示。 ・frmMain、frmPrint、PrtRepはクラスオブジェクト「CSeisanWk」をCALL ・「CSeisanWk」は「CSeisan」をCALLし、データベース にアクセスしている。 ・frmMain、frmPrint、PrtRepは「Esc」キーを押すと  Unload Meでフォームまたはレポートを閉じる ・1回目にfrmMainからfrmPrintを起動し、範囲指定後、 PrtRepを表示。PrtRepをEscキーで閉じ、frmPrintを Escキーで閉じる ・2回目にfrmMainからfrmPrintを起動し、範囲指定後、 PrtRepを表示。PrtRepをEscキーで閉じると、オートメーショ ンエラーが発生。 ・この状態で,PrtRepを範囲指定を変更して何度でも表 示可能。 ・ただし、frmPrintをESCキーにて閉じるとPGが終了してしまう(frmMainが閉じている) ・記述を「Unload frmMain、Unload frmPrint、Unload  PrtRep」に変更しても状況は変わらず。 ・クラスオブジェクトの開放の問題とおもい、オブジェクトの開放、DB切断、これらの記述をコメント化しても状況は  変わらず。 ・frmMainで「form KeyUp」イベントにブレイクポイントを置いて みたが止まらず。 ・MSDEでない環境ではこのエラーが起きない。 めちゃくちゃわかりにくい記述で申し訳ないのですが、 どなたかいい知恵を貸してください。

  • エクセルでのオートメーションエラー

    たびたびお世話になっております。 excel2000のVBAでユーザーフォームを作成し、ユーザーフォーム上のコマンドボタンで処理を実行しています。処理はワークシート上の計算を実行したり、メールに添付し送信したり・・・です。この実行後にもう一度ユーザーフォームを開こうとすると、(ユーザーフォーム.show)まず、パス名が無効です、のエラー。ワークブックを保存し閉じようとすると(これもユーザーフォームのコマンドボタン)、オートメーションエラーです、となります。ユーザーフォームを閉じ、excelを終了しようとすると、EXCELは終了できません。となってしまいます。 なぜ?どーして?チンプンです。 ちなみにその後、もう一度同じワークブックを開こうとすると、使用中になり、 読取専用でしか開けません。 どうか、教えてください。

  • Access VBA から Outlook 呼び出しでオートメーション

    Access VBA から Outlook 呼び出しでオートメーションエラーが発生することがあります。 環境は Access 2003、Outlook 2003 で Access VBA で CreateObject 等を使い Outlook.Application オブジェクトの作成、もしくは GetObject を使って既存のインスタンスを取ろうとすると「オートメーションエラー システムコールに失敗」というエラーが出るときと、出ないときがあります。 具体的には前処理でテーブル作成クエリの実行を挟むとエラーが発生し、挟まないとエラーが発生しません。 オブジェクトの作成の仕方が悪いのかと思い、いろいろと試しましたが結果は同じでした。 テーブル作成クエリはリンクテーブルで覗いているテーブルをローカルのテーブルとして丸コピーしてくることを目的としており、結構サイズが大きく、作成にも少し時間がかかるものです。 どうも決定的な手がかりが見つからず困っております。何かアドバイスございましたらお聞かせください。よろしくお願いいたします。

  • エクセルVBA ユーザーフォームをオブジェクトとしてセットする書き方?

    いつもご回答頂きありがとうございます。 エクセルVBAでユーザーフォームをオブジェクト変数として セットする書き方を教えていただけないでしょうか? エクセルVBAでAファイルとBファイルがあり AファイルのVBAからBファイルを開いて、データを取得し Aファイルに記入していく。と言うVBAを作成しました。 ただ、BファイルにはopenイベントでBファイルに作成された ユーザーフォームがloadされるようになっていて、 AファイルからBファイルを開けたとき、そのユーザーフォームを 消したいのですが、消す方法が分かりません。 AファイルからBファイルをopenメソッドを用いたあと、ユーザー フォームを消せばいいと思うのですが、書き方が分からず困って おります。 オブジェクトとしてセットして、そのオブジェクトをunloadすれば いいかな?とか思っているのですが、セットの仕方もわからず、、、 宜しくお願いいたします。 それぞれのファイル名を「ファイルA」、「ファイルB」、 ユーザーフォーム名を「UserFormB」としたとき、どのように 書けばよろしいでしょうか?

  • インポートエラー(IMP-00010)

    Solaris上のOracle9.2.0 でエクスポートしたファイルを Windows上のOracle9.0.1 にインポートしようとしたら 以下のエラーがでました ----------------------------------- IMP-00010:有効なエクスポート・ファイルではありません。ヘッダーは検証に失敗しました IMP-00000:エラーが発生したためインポートを終了します。 ----------------------------------- 原因は、Oracleのバージョン違い(9.2.0から9.0.1へのバージョンダウン)による物でしょうか?。 それとも、SolarisからWindowsにインポートした事による、例えば文字コード等による物でしょうか? また、原因に対する解決策はありますでしょうか?

  • Access VBA アクセスエラー

    あまりにも漠然とした質問で申し訳ありません。 VBAでAsseccを組んでいますが、下記エラーが発生します。 「ファイルのアクセスエラーが発生しました。ネットワークへの接続が切断されている可能性があります」 こころあたりのある原因もなく困ってます。 データファイルが壊れたってことでしょうか?

  • エクセルVBA フォームを開く時パスが見つからない

    エクセルVBAマクロを使って簡単なゲームを作成したのですが、原因不明のエラーに悩まされています。 ファイルを開いて、シート上のある部分をクリックすると UserForm1.Show となってゲームが開始される仕組みになっているのですが、この UserForm1.Show という命令のところで「実行時エラー '76' パスが見つかりません」が出てしまいます。 不思議なことに、ファイルを別名で保存しなおすと、このエラーが出なくなります。このひと手間で当座は遊べていますが、気持ちが悪いので原因を知りたいと思っています。 まず、UserFormを開くときに「パスが見つからない」というのはどういう事態なのでしょうか? 特にファイルを参照している箇所ではないので、皆目見当がつきません。また、別名で保存すると解消される理由としては何が考えられるでしょうか。 部分的な回答でも構いませんので、どうか知恵を貸していただければ幸いです。

  • EXCEL VBA 文字色を変える

    よろしくお願いします。 【条件】 セルの文字列を一文字ずつ読み込み、 文字色が赤だったら黒にするというVBAを作成したいです。 例) セルA(1、1)の「あいうえお」 の”い”が青、”う”が赤だった場合、”う”を黒にする。 【状況】 以下のようなVBAを作成しました。 実行するとVBAは正常終了するのですが、VBAで上記変換をかけたEXCELファイルを開くと エラーが発生します。 デバッグモードで一行ずつ実行すると下記※2部分で文字化け?しているようです。 VBA) Do Until i = c  If Range("xx").Characters(i ,c-1).Font.color = RGB(255,0,0) then    Range("xx").Characters(i, c-1).Font.color = RGB(0,0,0)  ・・・※2    i = i +1  End if Loop 【エラー】 『"ファイル名"には読み取れない内容が含まれています。このブックの内容を回復しますか? ブックの発信元が信頼できる場合は「はい」をクリックして下さい。』 『"ファイル名”の修復 読み取れなかった内容を修復または削除することにより、ファイルを開くことが出来ました。 修復されたレコード./xl/worksheets/sheet1.xmlパーツ内のビュー』 上記エラーが表示される+エクセルの内容の大部分が消えます。 【質問】 上記VBAは本物を持ち出せないのでイメージです。 (もしかしたら細かい間違いがあるかもしれませんが実物は構文エラーはありません。) 質問したいのはロジックではなく以下になるのでイメージで汲み取っていただけるとありがたく。。 (1)Fontの書き換えを行った際、上記【エラー】が発生するのはどのような理由があるか  わかりますでしょうか。 (2)エラーの理由の詳細はわからないが「こんなやりかたではどうか」という  【条件】を満たす他のロジックは何かないでしょうか。 他にもオートメーションエラーが発生したり正直お手上げ状態でわらをもすがる思いです。 思いつきでもよいので何かありましたら回答のほどよろしくお願いいたします。 

  • Excel VBAのゴミ?処理

    ExcelのVBAを修正、追加してそのまま保存するとファイルサイズが増えていきます。そのためにこのファイルを実行するとエラーが発生してしまうことがある。 私はこれを回避するために一度マクロモジュールを抜いてシートだけ保存し、モジュールのインポートを行い合成してファイルの管理をしています。これがマクロを変更する度におこなうのが手間である。何方か良い方法があれば教えてください。

  • Accessにインポートしようとするとエラーに

    Access2000にcsvファイルをインポートしようとすると、最後の「完了」ボタンクリック時に、下記エラーが表示され、 インポートが行われません。 「フィールド'フィールド名'の開始位置'35642'が有効ではありません。開始位置は32,767以内で指定してください。」 「インポート/エクスポート定義 'ファイル名 インポート定義'を保存するときにエラーが発生しました。」 これは、どこを修正すればいいのでしょうか?

専門家に質問してみよう