Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3468 / 13644 ツリー ←次へ | 前へ→

【61989】シート追加・削除の繰り返しで例外発生 新田 哲二 09/6/16(火) 8:45 質問[未読]
【62002】Re:シート追加・削除の繰り返しで例外発生 リノ 09/6/16(火) 16:00 発言[未読]
【62004】Re:シート追加・削除の繰り返しで例外発生 リノ 09/6/16(火) 16:06 発言[未読]
【62039】Re:シート追加・削除の繰り返しで例外発生 りん 09/6/18(木) 10:07 発言[未読]

【61989】シート追加・削除の繰り返しで例外発生
質問  新田 哲二 E-MAIL  - 09/6/16(火) 8:45 -

引用なし
パスワード
   Excel2003で動かしている処理において例外エラーは発生するため、問題の所在を確認するためにその処理ロジックだけを抜き出して(以下)動作させましたところ、Excel2003では約5000回、Excel2007では10,700近辺で例外が発生します。一回も完了を経験していません。使用しているPCのいずれにおいてもほぼ同じポイントで発生します
何かシステムリソースを消費しているのか、制限事項があるのか分かりません。どなたか、回避方法をご存知に方がありましたら教えていただきたいのですが。

Sub Sheet_Add_Del_Loop()
  Dim Count As Integer
  Dim シート名 As String 
  Count = 1
  Do While Count <= 12000
    On Error GoTo エラー処理
    Worksheets.Add.Move after:=Worksheets(Worksheets.Count) 'シートを最後のシートの後へ挿入
       Application.DisplayAlerts = False
    ActiveSheet.Delete
  Count = Count + 1
  Loop
  MsgBox "完了" & Count
  Exit Sub
エラー処理:
  MsgBox "Err" & Count
  On Error GoTo 0
End Sub

【62002】Re:シート追加・削除の繰り返しで例外発生
発言  リノ  - 09/6/16(火) 16:00 -

引用なし
パスワード
   >徐々にスローダウンしていきます。
しょうがないですね、これは。
ひたすらコピペを続けていると変更した情報は、当然メモリ内に蓄積していくわけだからなぁ。
と思うと、続けてコピペし続けるのにも抵抗がありますね。
下記リンク先にもたまに保存しろとか書いてあったような気もします。

でもなんでセル全部なのでしょうか?
場合によっては、何も記入されてないセルや、触ってもいないセルにも変更履歴が残ってファイルサイズが大きくなる時があるし...。
範囲を絞った方が良いと思いますけど。
UsedRange
で、範囲を絞るとか。

ところどころ
Doevents
をかましてみるとかで、多少は抑えられそうな気がします。


古い情報元しか解らないけど、2003でもあまり変わっていなそうでした。

[XL2000] オートメーションでセルの値の取得やコピーを繰り返すと応答しない
ht tp://support.microsoft.com/kb/414107/ja

【62004】Re:シート追加・削除の繰り返しで例外発生
発言  リノ  - 09/6/16(火) 16:06 -

引用なし
パスワード
   >Excel2003では約5000回、Excel2007では10,700
うひゃ〜。
どうも私の言っていたこととは次元が違うようですから、
無視してください。

【62039】Re:シート追加・削除の繰り返しで例外発生
発言  りん E-MAIL  - 09/6/18(木) 10:07 -

引用なし
パスワード
   新田 哲二 さん、こんにちわ。

>Excel2003で動かしている処理において例外エラーは発生するため、問題の所在を確認するためにその処理ロジックだけを抜き出して(以下)動作させましたところ、Excel2003では約5000回、Excel2007では10,700近辺で例外が発生します。一回も完了を経験していません。使用しているPCのいずれにおいてもほぼ同じポイントで発生します
>何かシステムリソースを消費しているのか、制限事項があるのか分かりません。どなたか、回避方法をご存知に方がありましたら教えていただきたいのですが。

ちょっと加工して、こういうマクロでテスト(ステータスバーにログを表示)しました。環境はWinXP & XL2003SP3です。

Sub Sheet_Add_Del_Loop()
  Dim Count As Integer, ws As Worksheet
  Dim シート名 As String
  Count = 1
 
  With Application
   .DisplayAlerts = False
   .ScreenUpdating = False
   Do While Count <= 12000
     On Error GoTo エラー処理
     With .ActiveWorkbook
       Set ws = .Worksheets.Add(after:=.Worksheets(.Worksheets.Count)) 'シートを最後のシートの後へ挿入
     End With
     s1 = Count & " " & ws.Cells(Count).Address(0, 0, external:=True)
     .StatusBar = s1
     ws.Delete
     Set ws = Nothing
     ' +1
     Count = Count + 1
   Loop
   .DisplayAlerts = True
   .ScreenUpdating = True
   .StatusBar = False
  End With
  MsgBox s1, vbInformation, "完了"
Exit Sub
'
エラー処理:
  MsgBox "Err" & Count, vbCritical, Error(Err)
  On Error GoTo 0
  Application.DisplayAlerts = True
  Application.ScreenUpdating = True
  Application.StatusBar = False
  MsgBox s1, vbExclamation, "中断"
End Sub

以下、実験結果。
VBEを起動して、
 VBEから直接実行 × 5850回前後で終了(エラー終了)
 VBEを後ろに隠してワークシートメニューバーのツール→マクロ × 上と同様

VBEを起動せずに、
 ワークシートメニューバーのツール→マクロ ○ 無事に完了
 シートにボタンを置いて、マクロを登録しクリックして実行 ○ 無事に完了
 ツールバーにコマンドボタンを配置しマクロを登録して実行 ○ 無事に完了

というわけで上のマクロだと、VBEを起動せずに実行するとエラーになりませんでした。VBEを起動しているとステータスバーへのログの表示が遅くなる(3桁目が簡単に読めるようになる)のでここでかなり負荷がかかってる気がします。

3468 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free