Microsoft Excel

Herbers Excel/VBA-Archiv

Wo ist die Bremse?

Betrifft: Wo ist die Bremse? von: Ryu_hoshi
Geschrieben am: 15.09.2004 17:13:46

Hallo Ich habe einen MAcro mit folgendem Inhalt:

Private Sub But_letzter_jahr_gesamt_Click()

Dim wksE As Excel.Worksheet
Dim i As Long
Dim dtJahr As Integer
Dim letzte As Long

    Application.ScreenUpdating = False
    Set wksE = ThisWorkbook.Worksheets("excel")
    dtJahr = Format(Now, "yyyy") - 1
    letzte = ThisWorkbook.Worksheets("excel").UsedRange.SpecialCells(xlCellTypeLastCell).Row
          
    With wksE
      
      For i = .Cells(letzte, 9).Row To 2 Step -1
        If Year(wksE.Cells(i, 9)) <> dtJahr Then
          .Rows(i).Delete
        End If
      Next i
    End With
    Set wksE = Nothing
    Application.ScreenUpdating = True
    
   ' Module1.letzter_Jahr_gesamt

End Sub


Fürs ausführen des codes in Module1 braucht excel nur paar sekunden während für den rest er bei 178 zeilen in der tabelle "excel" eine minute braucht.
Weiss jemand was die bremse ist und wie man das lösen könnte?

Gruss
Ryu
  


Betrifft: AW: Wo ist die Bremse? von: Otto
Geschrieben am: 15.09.2004 17:49:03

Hallo Ryu,

Meine Testumgebung: Excel 9.0 SR-1, Multilingual unter Windows 2000 SP-4

das ganze darf nie länger als eine Sekunde laufen!
Ich habe hier einiges überflüssiges rausgeschmissen, was aber nie die Laufzeit beeinflusst und den Application.Calculation reingenommen
Private Sub But_letzter_jahr_gesamt_Click()  

Dim wksE As Worksheet  
Dim lngI As Long  
Dim intJahr As Integer    
Dim lngLetzte As Long    

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Set wksE = ThisWorkbook.Worksheets("excel")
    intJahr = Year(Now) - 1
    lngLetzte = ThisWorkbook.Worksheets("excel").UsedRange.SpecialCells(xlCellTypeLastCell).Row  
         
    With wksE
     
      For lngI = lngLetzte To 2 Step -1  
        If Year(.Cells(lngI, 9)) <> intJahr Then  
          .Rows(lngI).Delete
        End If  
      Next lngI
    End With  
    Set wksE = Nothing  
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
   
  ' Module1.letzter_Jahr_gesamt

End Sub  


Gruß Otto


  


Betrifft: AW: Wo ist die Bremse? von: Ryu_Hoshi
Geschrieben am: 15.09.2004 18:49:09

Ich bin momentan zu Hause (hab hier das Macro nicht) aber ich probier es morgen aus und sag dann Bescheid.

Wozu ist eigentlich "Application.Calculation " da?

Gruss
Ryu


  


Betrifft: habs ausprobiert/bitter was erklären von: Ryu_Hoshi
Geschrieben am: 16.09.2004 10:10:32

Hallo Otto! Danke für den Tip mit Application.Calculation. Ich weiss nicht was das verändert (kannst du es bitte erklären?) aber es klappt jetzt Super selbst bei grossen Dateien ist es jetzt erträglich geworden. Danke schön!


  


Betrifft: AW: habs ausprobiert/bitter was erklären von: Otto
Geschrieben am: 16.09.2004 10:38:59

Hallo Ryu,

Meine Testumgebung: Excel 9.0 SR-1, Multilingual unter Windows 2000 SP-4

Application.Calculation entspricht Extras/ Optionen... / Berechnung
Ist hier Automatisch angehakt (der Normalfall) werden bei jeder Veränderung in der Mappe alle davon abhängigen Zellen neu berechnet. Falls hier eine Sverweis() oder Konsorten beteiligt ist, kann das sehr schnell enorm ausbremsen. Innerhalb Deiner Prozedur brauchst Du aber keine neuen Ergebnisse; erst nachher soll neu berechnet werden. Also schalte ich am Anfang der Prozudur auf Manuell und am Ende wieder auf automatisches Neuberechnen.

Gruß Otto