- ベストアンサー
エクセルVBA コンボボックスで強制終了
こんにちは。 エクセルVBAでいくつかのフォームを作成しているのですが、 常にではないのですが、「問題が発生したため・・・」のメッセージで 強制終了させられてしまいます。 恐らく、コンボボックスが原因かと思われるのですが。。。 申し訳ありません。教えていただけると嬉しいです。 VBA 1.Initialize (1)コンボボックス1リスト設定:データ2 (2)コンボボックス2~21(20個のコンボボックス)リスト設定 :データ数80 2.コンボボックス1_Change (1)コンボボックス22リスト設定:データ数80 現象 (1)コンボボックス22を▼でなく入力し、保存すると強制終了 (2)上記現象発生後、コンボボックス1の▼押下で強制終了 (3)複数のPCで試したが、性能の良いPCでもたまに起こる。 性能が悪いPCの場合、確実に起きる。 (4)他のフォームはいくらやってもこの現象は発生しない。 但し、コンボボックス2~21のような大量なコンボボックスはない 考えること (1)コンボボックスのリストの限界等はあるのでしょうか。 (2)メモリ等の関係で発生するのでしょうか。 (3)コンボボックスに入力不可とするか、テキストでNoを入力 させる方法をとった方がよいでしょうか。 長々とすみません。 よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >VBAを組んだのは2007で今、それを動かしているのは2002です。 >こんなことをしているのが悪いのでしょうか・・・。 一般論なのですが、VBAの場合は、下位互換は期待しないほうがよい、ということです。下のバージョンでは、テキストコード(.bas)で、エクスポート・インポートをしたほうが良いかもしれません。特に、2007と2003では、ファイルフォーマットが違いますからね。 >自分で設定しない限りは、Add-inの機能はエクセルに入ってないという認識でよいでしょうか? 今、私は、「自分で設定しない限り」だったか、ちょっとはっきり答えられません。これは、当面、そのままにしておきます。
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 #1のお礼に関して >そのテキストボックスはひらがなで設定しているのですが、それが半角英数字となってしまう場合、強制終了となるようです。 その設定を外したら、どうなるのでしょうか。 ところで、ご質問者さんのOffice のバージョンは、確か、 2007 だったような気がします。 私の発言は、いままでの前のバージョンでしたが、もしかしたら、IMEなど別の問題が発生しているのではありませんか?まだ、トラブルに関しては、未知のものが多いです。 そういえば、私の今の手元にあるのは、Office 2003 ですが、Microsoft Office Live Add-in は、Excelの一部のマクロでトラブルが起きます。本日、ついに、外すことにしました。
お礼
Wendy02様 本当にお世話になっております。 たびたびすみません。 早速、IMEModeを0:NoControlにしてみました。 でも、強制終了してしまいました。 バージョンに対してですが、 本当に質問の書き方が悪くてすみません。 VBAを組んだのは2007で今、それを動かしているのは2002です。 こんなことをしているのが悪いのでしょうか・・・。 (シートのコピーの問題も含め) Add-inについては、全然知らなく、ちょっとだけ調べて見ましたが、よくわかりませんでした。 自分で設定しない限りは、Add-inの機能はエクセルに入ってないという認識でよいでしょうか? であれば、私のエクセルには設定されていないと思われます。 なんだか、へんてこなお礼になってしまい、 申し訳ありません。 色々教えていただき、感謝でいっぱいの気持です。 ありがとうございます。
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。 ご質問のような現象は経験したことはありませんが...私なりに。 マクロの修正を何度も繰り返したことによる、コンパイルの不整合が 原因ではないかと推測します。 一度、ユーザーフォームをエクスポートしてファイルとして保存し、 ユーザーフォームを削除(開放)、その後インポートし直してみて 下さい。 もちろん、どのようなデータ・どの程度のデータ量を扱っているのか ご質問文からは読み取れませんので、ソースコード側の問題、そもそも 設計から無理があるのかは、現段階ではわかりません。
お礼
回答ありがとうございます。 ユーザーフォームおよび、標準モジュールも全てエクスポートし、 空にした状態で問題のフォームに関係するもののみ インポートをしてみました。 駄目でした。。。 >マクロの修正を何度も繰り返したことによる、コンパイルの不整合が 原因ではないかと推測します。 ご指摘通り、何度も修正をしていました。 このフォームだけおかしいのは、KenKen_SP様のおっしゃっているとおりだと思いました。 今は、フォームを作り直しています。 回答ありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 UserForm のコントロールで、ハングする質問は時々出ます。(印象がとても深いので記憶に残っています。)私は、UserForm に与えられているメモリ量を超えているのではないか、と思っています。それは、プロの方でも、てこずる問題のようです。 > (2)メモリ等の関係で発生するのでしょうか。 私の考えですが、Excel 2003までの場合、その(UserForm全体の)メモリの割り当ての上限が決められていて、たぶんメモリの融通が利かないのだと考えています。だから、2007 が良いというわけではなくて、やはり重いことには違いないです。だから、Multipage で切り替えたりしている方が多いようです。22個でしたら、半分ぐらいにして、1ページ・2ページとしたらどうでしょうか。 UserForm は、Applicationの中では、独立しているというか、そのままですと、他のオブジェクト(Sheets)と連結が悪いというのも、原因かなって思います。どうも、Visual Basic 自体と、こういうところで、感触が違いますね。 私は、以前、回答者として、逆に質問者の方のやり方で目からウロコだったのですが、「データ数80」のデータをセルの範囲をSource に与えてしまうという方法がありますね。意外に、その方法は有効のはずです。それに速いです。私などはつい、List に、配列変数で一気に入れてしまうと方法をとってしまいます。 試してみてください。 正解とはいえませんが、私の経験的な推理です。そして、これは、Excel独特の問題のような気がします。
お礼
回答ありがとうございます。 ずっと、プログラムとにらめっこなのですが、まだまだ解決せずです。 コンボボックスの2~22は、マルチページで5つのコンボボックス*4ページとしています。でも、駄目でした。 そこで、コンボボックス2~22をやめて、テキストボックスにしてしまいましたが、同一の現象が発生しました。 ますますなぞは深まるばかりです。 現象が大分見えてきたのですが、1つのコンボボックスに入力をしてその次のテキストボックスに移った際に、そのテキストボックスはひらがなで設定しているのですが、それが半角英数字となってしまう場合、強制終了となるようです。 今は、違うフォームで上手くいっているものをコピーして修正しなおしています。涙が出そうです。 回答、ありがとうございました。
お礼
こんにちは。 回答ありがとうございます。 そうですよね。 下位互換はやめた方がよいですよね。 一度、初期に戻ってやり直したいと今、考えています。 先ほどから、「オートメーションエラー」が発生し、 またもや、質問を投げてしまいました。 本当にありがとうございます。 これからもよろしくお願いいたします。 って言っていいですか?