2017-10-05 37 views
1

VBAにコードがあり、多数の行を使用するとメモリが大量に使用されます.GBを使用するとクラッシュすることがあります。コードは、XLMのためにいくつかのデータを見つけて、別の番号に行くよりも、それらを書いてください。 500行以上がある場合、それは潰れます。約10,000行を処理するコードを最適化する手助けをしてください。 は マレクがVBAコードの最適化

Sub ares() 
Application.Calculation = xlCalculationManual 
Application.ScreenUpdating = False 'potlačí obnovování obrazovky 
Application.DisplayAlerts = False 'potlačí varovné hlášky 
Application.DisplayStatusBar = False 
Application.EnableEvents = False 
ActiveSheet.DisplayPageBreaks = False 

Dim i As Integer 
Dim row As Integer 
Dim column As Integer 

For i = 2 To 15000 

    Sheets.Add(After:=Sheets(Sheets.Count)).Name = "ares" 
    Sheets("ares").Activate 

    On Error GoTo ErrorHandler 
    ActiveWorkbook.XmlImport URL:="http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=" & Worksheets("ico").Cells(i, 1).Value, ImportMap:=Nothing, Overwrite:=True, Destination:=Range("$A$1") 

    If Worksheets("ares").Cells(2, 10).Value = "" Then 

     Worksheets("ico").Cells(i, 2).Value = "OK" 


     row = 2 
     column = 3 
     Do While Worksheets("ares").Cells(row, 1).Value <> "" 
      If Worksheets("ares").Cells(row, 167).Value <> "" Then 
       Worksheets("ico").Cells(i, column).Value = Worksheets("ares").Cells(row, 167).Value 
       column = column + 1 
      End If 

     row = row + 1 
     Loop 
    Else 
     Worksheets("ico").Cells(i, 2).Value = Worksheets("ares").Cells(2, 10).Value 
    End If 
ErrorResume: 

    Sheets("ares").Delete 

Next i 

Application.ScreenUpdating = True 'zapne obnovování obrazovky 
Application.DisplayAlerts = FaTruelse 'obnoví varovné hlášky 
Application.Calculation = xlCalculationAutomatic 
Application.DisplayStatusBar = True 
Application.EnableEvents = True 
ActiveSheet.DisplayPageBreaks = True 


Exit Sub 
ErrorHandler: 
    Worksheets("ico").Cells(i, 2).Value = "Jiná chyba" 
Resume ErrorResume 

End Sub 
+0

'Application.DisplayAlerts = FaTruelse「obnovívarovnéhlášky' - それは新しいブール:) – Vityata

+0

データをインポートして、ICOのセルを設定することができます任意の方法ですシートエブリ時間を追加したり削除したりする必要はありません。多分シートを再利用しますか? – MacroMarc

答えて

0

Sheets("ares").Activateを削除し、LongIntegerを変更するあなたの助けをいただき、ありがとうございます。それで十分でしょう。

すべてのワークシートを正しく参照している限り、ワークシートをアクティブ化する必要はありません。整数に関する

、それはあなたのマイナースピードを断念 - Why Use Integer Instead of Long?

+0

私はそれをしました、そしてそれは少し役に立ちませんが、十分ではないかもしれません。私はそれを1000行のために実行すると、最終的なファイルは約60 000 KBの大きさであり、同じデータを持つ通常のexelは数KBの大きなhunderts KBですが、それがなぜそれほど大きいのかを知ることはできませんでした。 –