エクセルで書かれた数字群から別シートにバーコードを作り、シートごと消す、というマクロを使っています。


バーコードをシートごと消去しても、エクセルや他のアプリケーションが重く(動作が遅く)なり、エクセルを一度終了後立ち上げるとまた軽くなります。

これらの原因について心当たりのある方、またエクセルを再起動しなくても遅くならない方法についてご存知の方は、ヒントだけでも良いので書き込んで下さい◎解決策でなくてもコメントと言わず、回答でどうぞ。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2011/01/22 10:00:21
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kiri-katidid No.2

回答回数59ベストアンサー獲得回数7

ポイント35pt

シートを削除した直後に、ファイルを上書き保存して状態を確定させるのはどうでしょうか。

 

Application.DisplayAlerts = False

ActiveWorkbook.SaveAs "C:\DocumentsandSettings\Owner\MyDocuments\Book1.xls"

Application.DisplayAlerts = True

 

1行目:確認メッセージを止める

2行目:上書き保存する

3行目:確認メッセージを有効にする

 

URLはダミーです。

http://www.youtube.com/watch?v=Go7aI6oZKvQ

id:ReoReo7

おおっそんな方法も・・・

いいですね、それ。

いろいろあって素晴らしいです。感謝!

2011/01/19 00:55:26

その他の回答1件)

id:konata2983 No.1

回答回数71ベストアンサー獲得回数6

ポイント35pt

よそのサイトで紹介されていましたので 貼り付けておきます 参考までに

http://okwave.jp/qa/q5091739.html

id:ReoReo7

あー回答嬉しいです。

紹介頂きましてありがとうございます!

コピペーのメモリ開放とかについてですね。

2011/01/17 23:47:03
id:kiri-katidid No.2

回答回数59ベストアンサー獲得回数7ここでベストアンサー

ポイント35pt

シートを削除した直後に、ファイルを上書き保存して状態を確定させるのはどうでしょうか。

 

Application.DisplayAlerts = False

ActiveWorkbook.SaveAs "C:\DocumentsandSettings\Owner\MyDocuments\Book1.xls"

Application.DisplayAlerts = True

 

1行目:確認メッセージを止める

2行目:上書き保存する

3行目:確認メッセージを有効にする

 

URLはダミーです。

http://www.youtube.com/watch?v=Go7aI6oZKvQ

id:ReoReo7

おおっそんな方法も・・・

いいですね、それ。

いろいろあって素晴らしいです。感謝!

2011/01/19 00:55:26
  • id:ReoReo7
    自己回答になりますが
    For Each shp In ActiveSheet.Shapes
    shp.Delete
    Next
    でオブジェクトを削除してからシートを削除する。
  • id:taknt
    シートの追加とか削除って メモリの解放が うまくいってないんだろうね。

    シートの追加と削除を やらないようにして 作ればOKなのでは?
  • id:ReoReo7
    回答いつもありがとうございます。
    そうですね、シートのコピーペーストで問題が...

    確かに!!
    シート多くても10シート程度なんで、あらかじめ
    印刷用1、印刷用2・・・印刷用10くらいまで作っておいて、
    オブジェクトだけ削除して使いまわせば問題解決かも!

    シンプルだけど強力な解決方法ですね~♪
  • id:SALINGER
    バーコードコントロールを100個くらい貼りつけて、環境を再現して、
    リソースエディタとにらめっこしてメモリの増減を確認してみたけど、
    バーコードコントロール自体がそんなにメモリを消費しないんで重くなるまでいかなかったです。
    ただ、シートごと削除してもExcelの使用メモリはぜんぜん減少しないみたいですね。
    コントロールの追加、削除を繰り返しているとExcelファイル自体がどんどん肥大化するのは確かみたいです。
     
    全部削除する別の方法を紹介しておきます。
    ActiveSheet.Shapes.SelectAll
    Selection.Delete
  • id:ReoReo7
    いつもありがとうございます。
    わざわざ際限して下さったんですね!
    って、他の回答者さんも言わないけどしてくれてるのかな。

    バーコードコントロール・・・だいたい13桁のCODE128を1000個くらい生成したあたりからおかしくなる気がしますが・・・そんなにメモリ消費しないんですね。

    全部削除の例も嬉しいです。感謝!
  • id:SALINGER
    コントロールを1000個にして再現してみたらメモリの使用量がわかってきました。
    確かにシートごと削除するとメモリが開放されないです。
    そこからいろいろ方法を模索してますが、Excelの再起動以外無いみたいです。
    回答にある一度保存するというのではメモリは開放されず。
    バーコードコントロールを先に削除する方法もメモリを開放しきれていないです。
    いっそのこと別のブックに印刷用のシートを作り、ブックごと削除することも試しましたが、
    別のプロセスにしないと意味が無いようです。
  • id:ReoReo7
    なるほど、コントロール削除は一部有効、でも開放はしきれないんですね!

    うーん・・・・
    self.destroy()
    self.comeback()
    みたいなのができたらいいんですけど(笑)
    無いですよね。

    ありがとうございます、当分コントロール削除だけでやってみたいと思います。
  • id:ReoReo7
    ありがとうございました。いろいろと勉強になり楽しかったです。質問終了します♪

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません