Announcement

Collapse
No announcement yet.

Excel Speicher läuft voll

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Excel Speicher läuft voll

    Hallo alle miteinander,

    Ich bräuchte dringend mal eure Hilfe. Ich habe ein Excel Sheet welches für ein Live Display programmiert wurde. Das holt alle X Sekunden aus einer DB
    Informationen und stellt sie dar.

    Das geschiet mit Hilfe von 2 Timern, einer zum Daten holen und einer Zum anzeigen. Hier mal der ausschnitt.

    Code:
    Sub UpdateData()
        No_Fehler = False
        Call Abfrage
        If No_Fehler Then
            Call StartTimer
        Else
            With Worksheets("Report").OLEObjects("cb_Start").Object
               .Enabled = True
            End With
            With Worksheets("Report").OLEObjects("cb_stop").Object
               .Enabled = False
            End With
            
            Call StopTimer
            Call StopCopyTimer
            
            MsgBox "Server nicht erreichbar! Bitte starten Sie den Vorgang später neu!", vbCritical
    
        End If
        
    End Sub
    ' Startet den Timer mit den oben eingestellten Werten
    Sub StartTimer()
        RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)
        Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, Schedule:=True
    End Sub
    ' Stoppt den Timer wieder
    Sub StopTimer()
        On Error Resume Next
        Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, Schedule:=False
    End Sub
    ' Startet den Timer mit den oben eingestellten Werten
    Sub StartCopyTimer()
        RunWhenTwo = Now + TimeSerial(0, 0, 4)
        Application.OnTime EarliestTime:=RunWhenTwo, Procedure:=cRunWhatCopy, Schedule:=True
    End Sub
    ' Stoppt den Timer wieder
    Sub StopCopyTimer()
        On Error Resume Next
        Application.OnTime EarliestTime:=RunWhenTwo, Procedure:=cRunWhatCopy, Schedule:=False
    End Sub
    In der Abfrage hol ich mir die Daten aus der DB und hau sie in eine Temp Tabelle rein. Dann kopier ich mir die Werte aus den Feldern in Stringvariablen und diese dann in das Livedisplay.

    noch ein auszug:

    Code:
        ' Daten in die Variablen kopieren
        Worksheets("Data").Activate
        
        TotalCalls = Range("C2").Value
        CallsWaiting = Range("D2").Value
        LongestWaiting = Range("E2").Value
        AgentsLoggedOn = Range("F2").Value
        AgentsAvailable = Range("G2").Value
        AgentsInTalk = Range("H2").Value
        LostCalls = Range("I2").Value
        LongestWaitingToday = Range("J2").Value
        AgentsInWrapUp = Range("K2").Value
        
        
        ' Daten in die TFT Anzeige kopieren
        Worksheets("Report").Activate
        
        Range(strTotalCallsRng).Value = TotalCalls
        Range(strCallsWaitingRng).Value = CallsWaiting
        Range(strLongestWaitingRng).Value = LongestWaiting
        Range(strAgentsLoggedOnRng).Value = AgentsLoggedOn
        Range(strAgentsAvailableRng).Value = AgentsAvailable
        Range(strAgentsInTalkRng).Value = AgentsInTalk
        Range(strLostCallsRng).Value = LostCalls
        Range(strLongestWaitingTodayRng).Value = LongestWaitingToday
        Range(strAgentsInWrapUpRng).Value = AgentsInWrapUp
    Ich verwende ja immer die selben Variablen. Mein Problem ist das der Speicher
    den Excel benötigt immer weiter ansteigt über 2-3 Tage bis er zu hoch ist und
    kein Arbeitsspeicher mehr da ist.

    Hat vielleicht jemand eine Ahnung wodran das liegen könnte oder wie ich es
    vielleicht umgehen kann?

    Schonmal Vielen vielen Dank im vorraus.

    Mfg Fabian

  • #2
    Ich bin mir nicht sicher, dass das Problem an der Verwendung der Variablen liegt. Es könnte auch das Holen aus der Datenbank etc... liegen. Den wirklichen Schuldigen könnte man nur finden, wenn man zum Beispiel das Datenbank-lesen mal ne Weile "ausläst". Alternativ ist Excel natürlich nicht als Daueranwendung gedacht und kleine Speicherlöcher können sich offensichtlich sehr summieren.

    Bleibt denn des Nachts nicht mal ein definiertes Zeitfenster zum Neustart? Die Anwendung könnte sich ja selbst neu starten und gleich danach beenden. Dann wird hoffentlich der Speicher sauber bereinigt.
    Schöne Grüße, Mario

    Comment


    • #3
      Hallo,

      Also mittlerweile hab ich die Fehlerquelle eingegrenzt denke ich.

      Meiner Meinung nach liegt der Fehler darin das ich immer ei jedem Update
      eine QueryTable hinzufüge.

      Code:
      'With ActiveSheet.QueryTables.Add(Connection:= _
               '   sConn, Destination _
               '   :=Range("C1"), Sql:=sSqlA)
               '   .Name = "Query for bar graph"
               '   .FieldNames = True
               '   .RowNumbers = False
               '   .FillAdjacentFormulas = False
               '   .RefreshOnFileOpen = False
               '   .BackgroundQuery = True
               '   .RefreshStyle = xlOverwriteCells
               '   .SavePassword = True
               '   .SaveData = True
               '   .Refresh BackgroundQuery:=False
              'End With
              ActiveSheet.QueryTables.Item(1).Refresh
      Kann ich die nicht irgendwie nur einmal hinzufügen und dann sich updaten lassen?
      Wenn ich das so auskommentiert lasse und vorher einmal ausgeführt habe
      funktioniert es nicht, dann kriege ich keine Daten mehr.

      Hat da jemand vielleicht eine Idee ?

      Mfg Fabian

      Comment


      • #4
        Ich würde probieren, ob QueryTables geleert werden kann.
        Schöne Grüße, Mario

        Comment


        • #5
          hmm, also von dem beschriebenen sieht es für mich so aus als ob du bei jedem Lauf eine neue Query erzeugst, die nie gelöscht wird. Wenn Du sie nach dem Display/Durchlauf bzw. die Übergabe an das Display löschst und dann wieder erzeugst (das jedesmal erzeugen machst Du ja schon) sollte das den Speicher deutlich weniger belasten.
          Ohne die Struktur aber weiter zu kennen kann ich das nicht hunderprozentig sagen. Sorry

          Comment

          Working...
          X