[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロ実行時のエラー』(うみ)
いつもお世話になっております。 下のようなマクロを走らせて、zukeiシートのF:AGを他のフォルダに入っているファイル 全部にコピーしたいのですが、下の「ActiveSheet.Shapes.SelectAll」の所で「実行時 エラー7 メモリが不足しています。」 というエラーメッセージがでてしまいます。 フォルダに入っているファイルも、マクロのファイルも300KBくらいなので、メモリが 不足していることは考えられません。原因がわからずに、困っております。 どうぞよろしくお願い致します。
MyFol = "C:\Mydocu\" MyF = Dir(MyFol & "\" & "*.xls") Do While MyF <> "" Sheets("Zukei").Select
Columns("F:AG").Select Selection.Copy
Set MyBk = Workbooks.Open(MyFol & "\" & MyF) With MyBk Sheets("Tmp").Visible = True Sheets("Tmp").Select ActiveSheet.Shapes.SelectAll Selection.Delete
Range("F1").Select ActiveSheet.Paste
マクロは詳しくありませんが…。 >Columns("F:AG").Select >Selection.Copy F:AG列には何が入っているのでしょうか? 大量のコピーをしていますので、ココが怪しいのかな、と思いますが…。 (gloomy)
Select しないで書いたら?
Set MyBk = Workbooks.Open(MyFol & "\" & MyF) ThisWorkbook.Sheets("Zueki").Columns("F:AG").Copy With MyBk.Sheets("Tmp") .Range("F1").PasteSpecial .Shapes.Delete End With
とか (seiya)
直接の回答ではありませんが、一つ誤解されているようなのでその点に関してのみ。
>・・・のファイルも300KBくらいなので、メモリが不足していることは考えられません。 と思われているようですが、メモリはファイルサイズだけあれば良いわけではありません。 300KB のファイルを開くのにも数十Mの作業領域が必要な場合もありますし、開いた後に 作業を行うことでもメモリを消費します。
例えば、 Sub aa() Dim bb(10000000) End Sub というコードを持ったファイルは サイズは15Kですが、これが実行されるときには 200Mものメモリを消費します。
タスクマネージャを開き、プロセスの EXCEL をみながら作業をしてみてください。 VBE を開くだけでも数M増えますし、件のコードの Columns("F:AG").Select Selection.Copy が実行された瞬間にも、メモリ消費量が増大しているハズです。 F:AG の内容によっては、本当にメモリが不足している可能性もありますので、 一度タスクマネージャでタスクやパフォーマンスの情報を確認しながら作業をして みてはいかがでしょうか。 (Mook)
Copy したら、すぐに貼り付けてしまう(Clipboardを空にする)のが鉄則ですね. (seiya)
皆様、ありがとうございます。おっしゃるようにタスクマネジャーのプロセスを見ましたら メモリ使用量がとんでもない数字になっておりました。ファイルの大きさだけでなく、作業 でこんなにメモリを食うとは、大変勉強になりました。 しかし、まだうまく走りません。seiya様のselectしないマクロを使ってみたのですが、 .Range("F1").PasteSpecial .Shapes.Delete ←ここ! ここのところで「オブジェクトはこのプロパティ〜をサポートしていません」という エラー438がでてしまいます。 また、この.Shapes.Deleteの代わりに、
ActiveSheet.Shapes.SelectAll
Selection.Delete
を用いますと、SelectAllのところでまた「メモリ不足」エラーがでます。メモリを確認 した所、そんなに大きな値ではないようなのですが・・・。シート内の図形を1つ削除 したいだけなのですが、何かよい方法はありますでしょうか。(ただし、フォルダ内の ファイル毎に若干図形や場所が変わったりします。) どうぞよろしくお願い致します。 (うみ)
.Shapes(1).Delete では? (seiya)
オートシェイプを全部消してよいなら、下記のようにしてもダメですか? Sub delAS() Dim objAS As Shape For Each objAS In ActiveSheet.Shapes objAS.Delete '-- 全部がダメなら一つずつ Next End Sub (Mook)
ありがとうございました! seiya様の方法だと図形が選択されず、消されないままでした。(TT) Mook様の を利用させて頂いたならば、うまくいきました。 ところで、最後にもう1つ質問させて下さい。seiya様の .Range("F1").PasteSpecial で、貼り付けはうまくいってるのですが、列幅が変わりません。コピー元の列幅も貼り付けたいのですが、 我流で .Range("F1").PasteSpecial Paste:=xlAll とやってみたのですが、やはり列幅だけはコピーされませんでした。
Selection.PasteSpecial Paste:=xlColumnWidths も使えなかったのですが、よい方法がありましたら教えて下さい。 何度もすみません。 よろしくお願い致します。 (うみ)
With MyBk.Sheets("Tmp").Range("F1") .PasteSpecial xlPasteAll .PasteSpecial xlPasteColumnWidths End With とか... (seiya)
seiya様、毎度お世話様です。 やってみたのですが、.PasteSpecial xlPasteColumnWidthsのところで 「RangeクラスのPasteSpecialメソッドが失敗しました」と言われてしまいます。(うみ)
あ、.PasteSpecial xlPasteAllの後に、手動(マクロを使わず)で「形式を選択して 貼り付け」から「列幅」を貼り付けるとできました。でも、マクロを走らせると、はやり エラーメッセージがでます。。。(うみ)
確かxlPasteColumnWidths に付いては以前トラブったことがありますが、 うーーーーん、覚えていません... (seiya)
http://www.moug.net/tech/exvba/0050104.htm によると xlColumnWidths はマクロ記録時のみ使用される定数で実行するとエラーになるようです。
そもそもなのですが、今回はPasteSpecialで行う必要があるのでしょうか。 Zueki シートのF:AG からコピーしたくないものがあるのですか?そうでなければ、 With MyBk.Worksheets("Tmp") .Shapes.Delete ' --- 動かない? .Visible = True ThisWorkbook.Sheets("Zueki").Columns("F:AG").Copy _ Destination:=.Columns("F:AG") End With のような感じではどうですか。 (Mook)
Mook様、ありがとうございました!完璧に動きました!!! ただ、Shapes.Deleteは やはりだめでしたが。
いろいろ勉強になりました。seiya様、Mook様、どうもありがとうございました。 (うみ)
xlPasteColumnWidthsに付いてはすっかり忘れていました。 Mookさんの説明を見ても、へーーって感じです。 歳をとるとこうなりまかね... Mookさんありがとうございました。 (seiya)
遅ればせながら 【関連ログ】 [[20060915094542]] 『マクロ列幅のコピーでエラー』(ビッキー) [[20060613164708]] 『ペイストスペシャルでエラー』(かず) [[20050302171917]] 『マクロ 値の貼り付けで』(ぶー) 本家:[XL2000]マクロ記録でPasteSpecialの引数Pasteが正しく記録されない http://support.microsoft.com/default.aspx?scid=kb;ja;415379 (みやほりん)(-_∂)b
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.