Thema Datum  Von Nutzer Rating
Antwort
11.12.2015 10:09:11 Robert
NotSolved
Blau VBA script auf neuem Laptop extrem langsam
11.12.2015 17:45:28 Gast97140
NotSolved
14.12.2015 11:04:54 Gast17353
NotSolved

Ansicht des Beitrags:
Von:
Gast97140
Datum:
11.12.2015 17:45:28
Views:
680
Rating: Antwort:
  Ja
Thema:
VBA script auf neuem Laptop extrem langsam

Hallo Robert! Also habe mal deinen Code zusammengefasst. Da ich nicht die Datengrundlage wie du habe, konnte ich keinen Durchlauf mit 10000 Schleifen machen. :-)  Kann also zur Laufzeit nichts sagen. Müsstest du halt ggf. mal selber testen.

Zum Code noch.

2 Variablen habe ich umbenannt - gab da bei mir Probleme. Die Namen Month und Day sind eigentlich Methodennamen und schlecht für Variablen. Habe sie deshalb in monat und tag umbenannt. Deine Ifs am Anfang such ja eigentlich nur den Monat in Abhängigkeit vom laufenden Tag (jday) und dann noch den Tag im Monat. Habe ich durch eine Berechnung ersetzt. Wobei dein/mein Code wohl nur funtkioniert, wenn kein Schaltjahr ist - da wäre der Februar ja 29 TAge lang.

Dann habe ich dir noch was in grüne (Kommentare) reingeschrieben. Da sind eine Variable und 2 Rückgaben an Zellen m.E. zuviel. Außer du greifst da später nochmal drauf zu. Die könnte auch weg. Dann wären etliche Vergleiche (zum Jahresende hin) und 2 Rückgaben schonmal weg. Ob meine Berechnung die selbe Zeit kosten oder langsamer sind, weiß ich nicht. Für mehr Optimierungen, müsste man ggf. den ganzen Code sehen und schauen, was noch weg könnte.

Gruß

 For i = 1 To leZeile - 1
 With Workbooks(1).Worksheets(sheetname)
    tmin = .Cells(i + 1, 9)
    tmax = .Cells(i + 1, 10)
    jday = .Cells(i + 1, 5)
    If tmin = 9999 Or tmax = 9999 Then
        tmean = 9999
        Else: tmean = (tmin + tmax) / 2
    End If
    .Cells(i + 1, 11) = tmean
    
    If month_col = 0 Then
    ' berechnet dir den Tag und den Monat ohne die vielen if - variablenname war suboptimal
        If jday > 0 And jday < 366 Then
            monat = Month((DateAdd("d", jday - 1, "01.01.2015")))
            tag = CDate(DateAdd("d", jday - 1, "01.01.2015")) - DateSerial(2015, monat, 0)
        Else
            MsgBox "JDAY not valid"
        End If
        
        'ist daa Schreiben in die Zellen hier wirklich notwendig?? wird ja nur für die Variable datum benutzt.
        'wäre nicht auch möglich, datum wegzulassen und die nächsten 4 Codezeilen durch die hier zu ersetzen
        ' .Cells(i + 1, 4).Value = tag & "." & monat
        
        .Cells(i + 1, 1).Value = tag
        .Cells(i + 1, 2).Value = monat
    End If
    datum = .Cells(i + 1, 1).Value & "." & .Cells(i + 1, 2).Value
    .Cells(i + 1, 4).Value = datum
        ' also bis hier könnte mit der Zeile im Kommentar oben alles weg - end if aber lassen
    
    If .Cells(i + 1, 8) = 9999 Then
        If i > 1 Then
            If .Cells(i + 1, 7) < 9999 Then
                pseudo_snow = .Cells(i + 1, 7) - .Cells(i, 7)
                If pseudo_snow >= 0 Then
                    .Cells(i, 8) = pseudo_snow
                Else: .Cells(i, 8) = 0
                End If
            End If
        End If
    End If

  End With

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
11.12.2015 10:09:11 Robert
NotSolved
Blau VBA script auf neuem Laptop extrem langsam
11.12.2015 17:45:28 Gast97140
NotSolved
14.12.2015 11:04:54 Gast17353
NotSolved