- ベストアンサー
エクセル2010のマクロで困っています
- エクセル2010のマクロで困っています。同一フォルダ内・複数ブックの「異動表」というシートの特定のセルを抽出し、一覧にするマクロを素人ながら作成しようとがんばっています。しかし、98件(98ブック)前後でマクロが止まってしまいます。なぜなのでしょうか??ご教授願います。
- Excel 2010でマクロを使用して同一フォルダ内の複数のブックから「異動表」というシートの特定のセルを抽出し、一覧にする作業をしています。しかし、約98件のブックでマクロが停止してしまいます。なぜでしょうか?ご教授願います。
- Excel 2010のマクロで、同一フォルダ内にある複数のブックから「異動表」というシートの特定のセルを抽出し、一覧にする作業をしていますが、98件前後でマクロが止まってしまいます。問題の解決策をご教授ください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1 です。なんとも疑問ですが、ある程度処理すると、メモリが足りないとか起きていそうにも見えます。止まってしまうファイルを削除して実行してもやはり 98 件前後でとまりませんか?ただ、正直原因がわかりません・・・・・・。 ----- そこでちょっとソースコードを最適化してみてはどうだろう、と思いました。 セルをコピーするロジックですが、1セルだけなら選択や貼付けなどクリップボードを経由せずとも直接値を代入できます(範囲コピーだと、ちょっとコピー先の Range を指定する工夫がいりますが・・・・・・)。 こんな感じで。 Range("a1048576").End(xlUp).Offset(1, 0).Value = wb.Sheets("異動表").Range("b4").Value それと、Close した後にある参照を値に変更しているロジック、これは必要なのでしょうか。別のブックからコピーしてくる際に常に "Sheet1" に "値" をコピーしているのですが、最後のシートに対して参照の置換えを行っていますが・・・・・・・。どこかで最後のシートに、なにか細工しているのでしょうかね。 直接のお役に立てなくてごめんなさい。
その他の回答 (2)
- MAXIMAX
- ベストアンサー率60% (50/83)
#1 です。まだ質問継続されていますでしょうか・・・・・・。 マクロが止まった際に、小さなウィンドウで「実行時エラー」というのが表示されてはいないのでしょうか?エラーが出ないままマクロが止まるというケースがちょっと想定できないのですが・・・・・・。 もし表示されていないようでしたら、Visual Basic の画面の下の方に「イミディエイト」というところがあると思うのですが、マクロが止まった際にそこに ? err.number & " : " & err.description と入れてみてください。エラーが起きて止まっているのであれば、エラー番号とエラーメッセージが出るはずです。 ----- もう一つ、マクロが止まった際に Open しようとしていたファイルを、手動で Excel で開いてみて、他のファイルと変わらず特に普通に開けるか確認はしましたでしょうか?これもマクロが止まった際に、イミディエイトに ? fname とすれば、開こうとしていたファイルがわかります(ウォッチに登録しておくのもいいですが)。
お礼
遅くなりまして申し訳ありません。 「実行時エラー」というウィンドウは出ておりません。 (1)イミディエイトに入力すると、下記が表示されます。 ? err.number & " : " & err.description 1004 : 'Open' メソッドは失敗しました: 'Workbooks' オブジェクト (2)? fname で、開かなかったファイルは手動では開きます。 (3)さらに、わからないのが、 フォルダの中のうまく実行できたファイルを削除し、もう一度実行すると、最後まで実行できます。
- MAXIMAX
- ベストアンサー率60% (50/83)
close されているので同時に開き過ぎということもなさそうですよね。まずは止まったところでエラーメッセージが出ませんでしょうか?なんのエラーかがわからないと、解決策を探すのもちょっと大変です・・・・・・・。
お礼
ありがとうございます。 デバック画面で 【Set wb = Workbooks.Open(myfdr & "\" & fname) 'そのブックを開きwbとする。】 の部分が黄色ラインが引かれています。
お礼
いろいろとありがとうございました。 ご指導いただいた通り簡素化したのですが、ダメでした。 どうやらエクセルのバグ?のようです。 http://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=146940&rev=0 ですが、 VBAの画面から▸を押して実行すると、滞りなくマクロが動作することが わかりました。 これで運用します。 ありがとうございました。