Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1344to1348
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Clean Memory

Clean Memory
30.01.2014 16:25:32
Fabio
Hallo!
Ich habe eine Makro erzeugt, die folgendes macht:
- über einen Knopf kann man Dateien auswählen, die man bearbeiten möchten. Es wird in Excel eine Liste erzeugt;
- über einen 2. Knopf werden die Dateien in der Liste über den Excel-Import eingelesen (es handelt sich um Messdaten) und ein neues Worksheet pro Datei wird kreiert;
- danach werden die Messdaten ausgedünnt und pro neues Worksheet wird ein Diagramm erzeugt.
Das Problem ist, dass nach etwa 30 Dateien, eine Fehlermeldung kommt. Wenn ich Excel zu mache und ab der abgestürzten Datei fortsetze, läuft die Makro weiter für etwa 30 Dateien. Ich vermute, es ist ein Problem mit der RAM, die langsam voll belegt wird.
Gibt es eine Möglichkeit, die RAM zu befreien?
Hier der Code dazu:
Subroutine 1:
Option Explicit
Sub Jet_Importieren()
Dim n, k, l As Integer
Dim Dateipfad, Dateiname, Tabellenname As String
Dim Worksheetname, xlsDateipfad As String
Worksheetname = ActiveWorkbook.Name
n = 0
Do Until IsEmpty(Range("A5").Offset(n, 0))
Dateipfad = Range("A5").Offset(n, 0)
k = InStr(1, Dateipfad, "test")   ' Hier muss der Names des Jets-Projekts als letzer  _
Ausdruck stehen
l = Len(Dateipfad)
k = l - k
k = k + 1
Dateiname = Right(Dateipfad, k)
l = Len(Dateiname)
k = l - 4
Tabellenname = Left(Dateiname, k)
Workbooks.Add
If FileLen(Dateipfad)  0 Then
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & Dateipfad, _
Destination:=Range("$A$1"))
.Name = "Dateiname"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
ActiveSheet.Name = Tabellenname
xlsDateipfad = Replace(Dateipfad, ".csv", ".xls")
ActiveWorkbook.SaveAs Filename:= _
xlsDateipfad, FileFormat:= _
xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Application.Run "Jet_MesswerteAusdünnen"
Application.Run "Jet_Diagramm"
End If
ActiveWorkbook.Close
Windows(Worksheetname).Activate
'    Application.Wait (Now + TimeValue("00:01:00"))
n = n + 1
Loop
Set Worksheetname = Nothing
End Sub

Subroutine 2:
Option Explicit
Sub Jet_MesswerteAusdünnen()
Dim LZ, LS As Long 'letzter Zeile / letze Spalte
Dim TZ As Long 'Anzahl Messerte
Dim W As Long 'Anzahl Messerte die übrig bleiben sollen
Dim p100W As Single  'Anzahl Messwerte/gewünschte Anzahl Messwerte-1
Dim p1W As Single 'p100W-1(%von1)
Dim i, i0 As Long 'Schleifenzähler Zeilen
Dim j As Integer 'Schleifenzähler Spalten
Dim p As Long 'Ergebnis ohne Nachkommastellen
Dim ws As Worksheet
i0 = 39
TZ = ActiveSheet.UsedRange.Rows.Count
TZ = TZ - i0
W = 1000
If TZ 

Subroutine 3:
Option Explicit
Sub Jet_Diagramm()
Dim LS As Long
Dim DiaData As Range
Dim DN As String
Dim ws As Worksheet
DN = ActiveSheet.Name
LS = ActiveSheet.Cells(3, Columns.Count).End(xlToLeft).Column ' letzte belegte Spalte)
LS = (LS - 2) / 2 'Anzahl der Spalten (= Anzahl abgefragter Kanaale)
ActiveSheet.Range(Cells(1, LS + 3), Cells(1, LS + LS + 2)).Select
Range(Selection, Selection.End(xlDown)).Select
ActiveWindow.ScrollRow = 32200
ActiveWindow.ScrollRow = 1
ActiveSheet.Range(Cells(1, LS + 3), Cells(32002, LS + LS + 2)).Name = "DiaData"
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
ActiveChart.SetSourceData Source:=Range("DiaData")
ActiveChart.Location Where:=xlLocationAsNewSheet
ActiveChart.Name = DN + "_Diagramm"
ActiveChart.Axes(xlValue, xlPrimary).HasTitle = True
ActiveChart.Axes(xlCategory, xlPrimary).HasTitle = True
ActiveChart.SetElement (msoElementChartTitleAboveChart)
ActiveChart.ChartTitle.Select
Selection.Format.TextFrame2.TextRange.Font.Size = 20
ActiveChart.ChartTitle.Select
ActiveChart.ChartTitle.Text = DN
Selection.Format.TextFrame2.TextRange.Characters.Text = DN
ActiveChart.Axes(xlValue).AxisTitle.Select
Selection.Format.TextFrame2.TextRange.Font.Size = 16
Selection.Format.TextFrame2.TextRange.Font.Bold = msoTrue
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "p in bar / T in °C / Spannung in V"
Selection.Format.TextFrame2.TextRange.Characters.Text = "p in bar / T in °C / Spannung in V" _
ActiveChart.Axes(xlCategory).AxisTitle.Select
Selection.Format.TextFrame2.TextRange.Font.Size = 16
Selection.Format.TextFrame2.TextRange.Font.Bold = msoTrue
ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Text = "t in s"
Selection.Format.TextFrame2.TextRange.Characters.Text = "t in s"
ActiveChart.Legend.Select
Selection.Format.TextFrame2.TextRange.Font.Size = 16
ActiveChart.Axes(xlValue).TickLabels.Font.Size = 16
ActiveChart.Axes(xlCategory).TickLabels.Font.Size = 16
ActiveWorkbook.Save
Set DiaData = Nothing
Set ws = Nothing
End Sub
Hat vielleicht Jemand Zeit und Lust, sich das anzuschauen?
Danke,
Fabio

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Clean Memory
31.01.2014 04:24:19
Rolf.dW
Hallo Fabio,
zunächst einmal solltest du deine Variablen richtig deklarieren.
Mit "Dim n, k, l As Integer" definierst du nur "l" als Integer (2Bytes), der Rest (n und k) wird vom System automatisch
als Variant (16 Bytes) definiert. Das belastet unnötig deine Rechnerkapazität.
Besser wäre: Dim n As Integer, k As Integer, l As integer
Gleiches gilt natürlich sinngemäß für die übrigen Variablen in deinen Makros.
Zu deiner eigentlichen Frage muss ich leider passen; ich kenne deine Dateien nicht.
Allerdings habe ich in deinen Makros (nur) einmal die Anweisung ActiveWorkbook.Save gefunden, aber nie ActiveWorkbook.Close.
Habe ich da etwas übersehen?
Wenn nicht, dann könnte es durchaus sein, dass – bei 30 geöffneten Dateien, deren Volumen ich wiederum nicht kenne – dein Rechner sagt: "Grblgrrrr…, Annemie, isch kann nit mie!"
AVE VAGINA AUGUSTUS - ICH GRÜSSE DICH, PFLAUMENAUGUST
(ich hoffe du verstehst Spass)
Ciao bello,Rolf

Anzeige
AW: Mist, mal wieder...
31.01.2014 04:25:40
Rolf.dW
den Haken vergessen.
Sorry, Rolf

AW: Mist, mal wieder...
31.01.2014 09:55:05
Fabio
Danke, ich werde es ausprobieren!!!
:))

AW: Mist, mal wieder...
31.01.2014 10:22:25
Fabio
Hallo!
Zum Workbook.Close, das habe ich schon drin. Aber danke für den Tipp!
Ich habe die Variabeln richtig deklariert, allerdings kommt es immer noch zum Aufbrauch der RAM.
Ich bin mir ziemlich sicher, dass was die RAM aufbrauch ist die Erstellung von Diagrammen. Die entsprechende Sub-Routine ist "JET_Diagramm". Vielleicht kannst Du Dir das mal anschauen, wenn Du Zeit hast.
Viele Grüße,
Fabio

AW: JET_Diagramm...
31.01.2014 12:26:29
Rolf.dW
kann ich mir momentan leider ebenso wenig ansehen, wie deine Musterdatei, Fabio.
Seit meiner letzten Nachricht an dich habe ich ernsthafte SW-Probleme.
Fasse das bitte nicht falsch auf. Nicht du bist mein Problem, sondern diese blöde Kiste, mit deren Hilfe ich gerade diese Nachricht an dich schreibe. Ich deklariere deine Frage nochmals als offen, damit dir von anderer Seite weiter geholfen werden kann.
Gruß, Rolf

Anzeige
AW: JET_Diagramm...
31.01.2014 21:39:15
Rolf.dW
Ciao Fabio,
ich kann dir zurzeit nicht helfen!
Gruß, Rolf

AW: JET_Diagramm...
02.02.2014 16:27:05
Rolf.dW
Ciao Fabio,
mein SW-Problem habe ich inzwischen nahezu lösen können. Zumindest kann ich jetzt wieder auf die meisten Anwendungen zugreifen.
Beim "unzip" deiner Datei kam leider nur Müll raus (csv-Suffix).
Gruß, Rolf

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige