dポイントプレゼントキャンペーン実施中!

いつもお世話になっております。
コントロールを使用するのが初心者で、皆さんに助けられています。
ありがとうございます。
たびたびの質問で申し訳ありませんが、よろしくお願いたします。

今までは出なかったのですが、つい先ほどから、
1つのフォームをshowすると「オートメーションエラー」が
発生してしまいます。
しかし、一度、VBAのコードを開けると、エラーは発生しません。

調べては見たのですが、確実な解決法がなく、
下記の件の方はどのように解決されたのか教えていただきたいです。
http://oshiete1.watch.impress.co.jp/qa4383343.html

いくつか有効な手段では、と自分で思う事を記述したいと思います。
(1)ファイルが壊れている可能性
 a.VBAを全てエクスポートしインポートしなおす
   →やってみましたが、ダメでした。
 b.ファイルの名前を変える
   →やってみましたが、ダメでした。
(2)showの使い方がおかしい
 a.現在、showで出力し、unload Meで開放している状態です。

たびたびの質問申し訳ありません。
よろしくお願いいたします。

A 回答 (3件)

こんにちは。



>只今、ファイルを再作成し、すべてのエラーが出なくなりました!!

それは、おめでとうございます。

>VBAは1000字以上記入たくさんしているのですが、問題なのでしょうか?

ここらは、もうご承知のことだと思いますが、VBAは、VBとは違って、実際には、メモリ制限にぶつかることがあります。それで、大きなコードを書くとき、UserForm は、ローカルモジュール(オブジェクトを持っている)ですから、標準モジュール(オブジェクトを持っていない)に、逃がすように書いたほうが良いような気がします。

特に、1つのプロシージャは、あまり長く書かないほうがよいということです。(100行程度まで)パーツ・パーツでコードを作っていくということです。

また、標準モジュールも、その内容(例えば、文字列を処理する、インターネットにアクセスする)によって、モジュールを替えて、ひとつの標準モジュールの仕事は同じ系列の仕事にする、という暗黙のルールがあります。

>アドインについては、勉強不足でよくわかっていません。

アドインも本格的に勉強する、難しいです。詳しいのは、MSから出ている『プログラマーズガイド』なんていう本に出てきますが、私たちが知りたいのは古いバージョンの本にしか出てこないのです。(ブックオフなどの古本屋で、数百円で手に入ったりします。)本格的に作ると、細かな部分が、分からないことが出てきてしまいます。今のスタイルは、できるだけ、Office 97のVBAの資料を集めるとプラスになることが多いです。それ以降のものは極端に難しいです。Vista + Office 2007 でも、理屈は同じです。

>知り合いのために、ちょっと作ろうかなと思ったフォームでこんなに手こずるとは思ってもいませんでした。

私の場合は完成しなかったです。もう数年前に、掲示板ではほとんど解答ができたので、自由にできるつもりになっていたのでい。それで知り合いから仕事の依頼を請けて、しばらくやってみて、1週間では解決できないとわかったので、その時点で相手に、できない旨とお詫びを添えて連絡を入れました。今、されていることとは違うにしても、同じくUserFormが問題でした。その後、原因を見つけるのに、1年以上掛かりました。

なお、私は、だいたいは、丸3日で形にならなければ、できないにします。

何かのお役に立てれば幸です。
    • good
    • 0

こんにちは。



全体的なコードの雰囲気は、アドインのようです。

> (1)多数あったコンボボックスをテキストに変更 →解決せず
> Call com01_開始処理(a,b,c)  /使用するシートを表示し、マクロのみ変更可とする

この2行の関連性はありますか?テキストボックス(コンボボックス)のRowSourceは、空になっているのですか?

それと、文の最後の部分が気になりました。

>1000字以上でエラーになってしまうため、見づらくすみません。お礼もろくに書けずすみません。

ここに載せられない1000字というものも、実は、私は、削除覚悟で書いたことがあります。その時、ここに入ったけれども、それでも、かなり大きなサイズです。それは、いろんな問題が発生する可能性があります。

これについてのアドバイスとしては、まず、UserForm 自体に入れるものと、そうでないものは、きちんと区分けすることですね。それは、前回書いたメモリの配分の問題です。

ところで、実際に同じ立場の場合、経験としては、だいたい、2週間程度、いじっていて、解決しないと、その辺りを見切りだとして、最初から作り直すことをします。かなりレベルの高い問題を抱えている可能性があります。私自身が、同じように、どのようにもならないところに入り込んだことがあります。

確かに、コードを失うのはつらいのですが、このレベルになると、他人に頼るということもできないのです。原因の場所が特定できない場合、または特定できても、根本的にメモリの配分などがある場合は、やむをえないのです。ただし、同じパターンで書けば、同じハメに入ってしまうこともあるのですが。
    • good
    • 1
この回答へのお礼

いつもありがとうございます。
只今、ファイルを再作成し、すべてのエラーが出なくなりました!!
本当にありがとうございます。

アドインについては、勉強不足でよくわかっていません。すみません。これから勉強いたします。

開始処理は、非表示されているシートを表示させているだけなので、フォームとの関連性はありません。

コンボボックスは、InitializeではClearせず、設定しているのですが、他の設定時には、必ずClearしてから設定しています(RowSourceプロパティの設定はありません)

1000字の件は、このお礼内容欄のことでした。すみません。わかりづらく書いてしまって。。。VBAは1000字以上記入たくさんしているのですが、問題なのでしょうか?ちょっと不安になってしまいました。

知り合いのために、ちょっと作ろうかなと思ったフォームでこんなに手こずるとは思ってもいませんでした。
Wendy02様のおかげでなんとか、終了できそうです。
本当にありがとうございます。
初めて作成したフォームだったため、修正等たくさんしてしまい、それのためにファイルが壊れちゃったのかな?という気がします。

これからはWendy02様のように回答ができるように頑張ります。
本当にありがとうございました。

お礼日時:2009/02/18 15:15

こんばんは。



たぶん、リンク先は役に立たないと思います。
まあ、Focus している最中に、Hide したらエラーが出るでしょうね。(^^;

>(2)showの使い方がおかしい
> a.現在、showで出力し、unload Meで開放している状態です。

前回の話で、私は、別のことばかり書いてみました。他の方も書いていたように、ソースをまず見るべきでした。私の書いたメモリのことは、そんなに的外れではないにしても、つい余計なことばかり書いてしまいました。(自分がバカみたいでした)

コードを見せていただけますか?

リンク先の質問はきまった回答がありますが、#1コードでオートメーション・エラーが出ること自体は、興味深いです。解決もなにもありません。それ自体は使わなかったということですね。

この回答への補足

こんばんは。
回答のお礼が遅れてしまい、本当にすみません。
しかも、補足の欄ですみません。
実は、問題の2002のPCが現在、使えない状況でして。。。
(PC故障ではありません。ちょっと持っていかれてしまいました)
2~3日中には、もう一度今回の現象をまとめて、
ご報告したいと思っております。

本当に、親切に教えていただいているのに申し訳ないのですが、
こんな私も見捨てずによろしくお願いいたしますm(..)m

いつもありがとうざいます。
次回はお礼の欄に書かせていただきます。

補足日時:2009/02/16 20:06
    • good
    • 0
この回答へのお礼

回答をいつもありがとうございます。今までの現象をまとめてみました。
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字以上でエラーになってしまうため、見づらくすみません。お礼もろくに書けずすみません。

お礼日時:2009/02/18 11:03

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

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


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