- ベストアンサー
VBA実行時エラーの対策と原因について
- VBAを使用してエクセルのデータを並び替えようとした際に、実行時エラーが発生しました。エラーコードは'1004'で、RangeクラスのSortメソッドが失敗したことを示しています。また、別のエラーコード'-2147417848(80010108)'も発生し、オートメーションエラーが発生しました。このエラーは、起動されたオブジェクトがクライアントから切断されたことを示しています。具体的な原因は分かっていないため、質問しました。
- エラーの原因については特定されていませんが、VBAを使用してデータを並び替える際に発生する実行時エラーとオートメーションエラーの対処法があります。実行時エラーの場合、Sortメソッドの引数の範囲指定が正しいか確認すると良いでしょう。オートメーションエラーの場合、オブジェクトの起動や切断に関連する問題が起きている可能性があります。具体的な原因を特定するためには、詳細な情報が必要です。他の環境で同じコードを実行してエラーが発生するかどうかを確認し、問題が特定できない場合は、VBAのバージョンや使用しているアプリケーションの環境などを確認することをおすすめします。
- VBAを使用してエクセルのデータを昇順で並び替えようとした際に、実行時エラーやオートメーションエラーが発生しました。具体的な原因は不明ですが、エラーの解決策としては、Sortメソッドの引数の範囲指定を確認することや、他の環境で同じコードを実行してエラーが発生するかどうかを確認することが有効です。また、VBAのバージョンや使用しているアプリケーションの環境も確認することをおすすめします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >セルに書き込んで、結果を読み込むようにすれば上手くいきますか? 10+32,767(字) * 2(byte) / 1,024 だから、約64kb 文字列はすべて2バイト扱いされます。 それに反して、String型の変数は、2Gまでです。 もちろん、Variant型でも、量的には減りますが、それでも、扱うことができると思います。 ところで、TextBoxの容量はいくつだったか、調べてみると、以下のような話が見つかりました。 まず、間違いないと思います。 --- http://www5b.biglobe.ne.jp/~yone-ken/VB/TextBox.html TextBoxにまつわるFAQ [テキストボックスって容量の制限はあるんですか? ] [64Kbyteです。それ以上のテキストを扱う場合はRichTextBoxを使います。ちなみに、文字列変数は固定長でも可変長でも最大約2Gbyteまでです。] ----- 私は、RichTextBox という手があることをすっかり忘れていました。 もちろん、Excel2003では、フルインストールしていれば、VB6Runtimeに入っているはずです。 なければ、MSからダウンロードすればよいです。試してみる価値は十分にあると思います。
その他の回答 (3)
- WindFaller
- ベストアンサー率57% (465/803)
ところで、SPLITに関しての質問というのは、何だったのでしょうか? 削除されてしまっていたのですが、これとは関係あるのでしょうか? もし、うまく行かないというなら、なかなか厄介な問題があるような気がします。 なぜなら、SPLITで分けられる配列は、おそらく、Variant で受けなくてはならないからです。 もし、明示的なデータ型なら、もう少し余裕が取れるからです。
お礼
回答ありがとうございます。 見て頂いていたようですが、 この質問と同じような内容でした。 少し対策を考えて見ます^^
- WindFaller
- ベストアンサー率57% (465/803)
こんばんは。 >With Worksheets("データ") > .Range("A2:N" & .Cells(.Rows.Count, 1).End(xlUp).Row).sort _ > Key1:=Range("E3"), Order1:=xlAscending, Key2:=Range("C3"), _ > Order2:=xlAscending, Key3:=Range("A3"), Order3:=xlAscending >End With 上記マクロに関しては、他人が書いたもののようですから、それは、今のところ触れないことにしますが、Key1:=Range("E3")などのKeyは、アクティブシートという意味ですから、シートを限定した使い方だと思います。 本題はこちらになります。 >実行時エラー'-2147417848(80010108)' >オートメーションエラーです。 >起動されたオブジェクトはクライアントから切断されました。 >と表示されます [ マクロ ] エラーになったりならなかったりする http://okwave.jp/qa/q8484198.html こちらに書きましたが、未だ、解決する見通しは立っておりません。 確か、ご質問者さんは、Excel2003ですから、今、何に対して、オートメーション・エラーを起こしているのか分かりません。 エラーの意味は、オブジェクトが生成されていたものが死んでしまって、そのオートメーションの残骸にアクセスしようとしているということなのですから、今、その範囲は限られるはずです。 VBA上のエラーですが、その戻り値は、Cのエラーです。 >フォーム上のテキストボックスにデータが記入されています。 これは、文章として、ユーザーフォームのことでしょうか。 もし、そうですと、実務上は、意外に気をつけなくてはならない部分があります。 もしかして、1つのTextBoxに対して、取得したテキスト・データが大きすぎるのかもしれません。 それで、TextBoxが死んでしまうかもしれません。 もし、そうなら、設計の根本から変えたほうがよいでしょう。 Range("A1").Resize(Ubound(a),1) = Application.Transpose(a) として、セルに張り付けすること自体は、エラーが発生する要素はありませんが、Excel 2003の配列のデータ量は、公開はされていないのですが、およそ5~6,000個(セル数)の間ぐらいだったと思います。
お礼
回答ありがとうございます。 ご指摘通り、Textboxが死んでいるのかもしれません。 データは多いときに数十万という文字列が記入されます。 http://okwave.jp/qa/q8452163.html VBA フォーム上textbox指定範囲の抜き出し 上記方法を採用しております。 しかし、テキストボックス上には全ての文字データが入っておらず、途中で終わっているような状態でした。 セルに書き込んで、結果を読み込むようにすれば 上手くいきますか? 回答ありがとうございました^^
- bin-chan
- ベストアンサー率33% (1403/4213)
前半 データは何行ありますか?
お礼
回答ありがとうございます! データは2130行ありました。 前半の質問は、なぜかExcelを再起動したら直りました! ありがとうございます^^
お礼
回答ありがとうございます! RichTextbox、標準で入っていませんでした… なので、探してみようと思います^^