2016-11-20 27 views
0

このExcel VBAスクリプトでは、ワークブック内のシートをループし、いくつかの列を削除してそのブックの要約版を作成します。Excel VBA。 EntireColumn.Delete実行時にメモリリークが発生する

私は、このコマンドを使用して列を削除:

Columns(columna).EntireColumn.Delete 

私のループは特別なものではありません:

Application.ScreenUpdating = False 
WS_Count = ActiveWorkbook.Worksheets.Count 
     For I = 1 To WS_Count 
      ActiveWorkbook.Worksheets(I).Activate 
      MyFunction    
     Next I 
Application.ScreenUpdating = True 

インサイドMyFuntion私が持っている:

'I delete 3 columns in each sheet 
Columns("E:G").EntireColumn.Delete 'Memory leak exactly here! 

私は、このコマンドを初めて実行しますシートでは、これはメモリスパイクを引き起こし、約10-12枚のシートをループした後、システムは使い果たされる十分なリソースエラーをスローします。

私はいくつかのマシンでこれを試してみましたが、バージョン(2007,2013)

エクセルましたが、これは通常のExcelの動作ですか?このメモリリークを回避するにはどうすればよいですか?

UPDATE 瞬間のために私はすべての数枚を処理した後、ブック(ThisWorkbook.Save)を保存する場合は、回避策として、私はいくつかのメモリを回復することができます。これは私のスクリプトをはるかに遅くしますが、少なくとも仕事をします。

間違いなく、すべてのExcelバージョンで列を削除するとメモリリークが発生します。提案されたソリューションのほとんどは、それらを削除するには、単に他の方法ですが、我々はこの

Dim ws As Worksheet 

With Application 
    .ScreenUpdating = False 
    '' If still having memory spikes try uncommeting the .Calculation lines too 
    '' (There's also one at the end) 
    '.Calculation = xlCalculationManual 
End With 

For Each ws In ThisWorkbook.Worksheets 
    MyFunction ws:=ws 
Next ws 

With Application 
    '.Calculation = xlCalculationAutomatic 
    .ScreenUpdating = True 
End With 

Public Sub MyFunction(ws As Worksheet) 
    ws.Range("E:G").EntireColumn.Delete 
End Sub 

これで試してみてください

Columns(columna).EntireColumn.Delete 
+0

使用しているループを投稿する必要があります。 – Niclas

+1

変数名を 'column'から' MyColumn'のような別の名前に変更してみてください。 – Fadi

+1

E、F、G列を常に削除しようとしていますか?もしそうなら、 'Columns(" E:G ")。EntireColumn.Delete'を使うことができます。また、 'Application.ScreenUpdating'を使うことができます。 – Niclas

答えて

0

のような単純なコマンドを持っているIMOとき、これは不要であるべき.Activateの使用を取り除きます。これは余分なオーバーヘッドであり、これを行う際に必要ではなく、明示的に範囲を宣言します。

+0

運がない。このすべてを実装した後でもメモリリークが発生します。さらに、https://www.thespreadsheetguru.com/blog/2015/2/25/best-way-to-improve-vba-macro-performance-and-prevent-slow-code-executionの機能を追加しました。また避けてください。 –

関連する問題