Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1472to1476
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

Array wird zur Laufzeit beschädigt

Array wird zur Laufzeit beschädigt
05.02.2016 15:01:06
masl
Hallo,
ich habe aktuell ein, für mich unlösbares Problem und hoffe, dass Ihr mir dabei helfen könnt.
Ich habe ein VBA-Makro geschrieben, welches seit Wochen ohne Probleme funktioniert hat. Seit dem heutigen Ausführen (keinerlei Änderungen am Makro), kommt es allerdings immer zu einem Laufzeitfehler (9).
Der Fehler tritt immer nach Erreichen von i = 8932 auf. Das Array "arDaten" ist vor diesem Schritt ordnungsgemäß mit Daten befüllt (max 9120). Dann aber auf einmal leer.
Auch führt es sehr oft zum Absturz von Excel.
Ich bin da nun wirklich mit meinem Latein am Ende. Ich habe mit diesem Makro schon immens größere Datenmengen ohne Probleme verarbeitet.
Ich würde mich sehr über Eure Hilfe freuen
Gruß
masl
Hier das Makro:
Sub Mittelwerte()
Dim arDaten(), arMittel() As Variant
ReDim arMittel(100000, 7)
Call Daten(arDaten)
Call Mittelwert(arDaten, arMittel)
End Sub

Sub Daten(arDaten)
Dim imax
'Maximum bestimmen
Worksheets("Daten").Activate
Range("B2").Select
Selection.End(xlDown).Select
imax = Selection.Row - 1
'Daten in Array einlesen
arDaten = Range("B2:H" & imax)
End Sub

Sub Mittelwert(arDaten, arMittel)
Dim i, GESi, KKVi, d, m, h, min, minNext, ix, dNext, GES, GESd, KKVd, KKV, ih, id
ih = 1
id = 1
For i = LBound(arDaten) + 1 To UBound(arDaten)
If i = UBound(arDaten) Then
GoTo fertig
End If
d = arDaten(i, 1)
m = arDaten(i, 2)
h = arDaten(i, 4)
min = arDaten(i, 5)
KKVi = arDaten(i, 6)
GESi = arDaten(i, 7)
minNext = arDaten(i + 1, 5)
dNext = arDaten(i + 1, 1)
'
KKV = KKV + KKVi
GES = GES + GESi
di = di + 1
If minNext = 0 Then
KKVh = KKV / 4 'Verbrauchsmittelwert pro h
GESh = GES / 4 'Verbrauchsmittelwert pro h
KKVd = KKVd + KKVh ''Verbrauchsmittelwert pro d
GESd = GESd + GESh
If d dNext Then
If arDaten(1, 7) = "ta" Then
GESd = GESd / 24
End If
arMittel(id, 1) = d
arMittel(id, 2) = m
arMittel(id, 3) = KKVd
arMittel(id, 4) = GESd
KKVd = 0
GESd = 0
id = id + 1
End If
KKV = 0
GES = 0
End If
If i = 8931 Then
Debug.Print
End If
Next i
fertig:
Worksheets("Verbrauch").Activate
For p = LBound(arMittel) + 1 To UBound(arMittel)
Cells(p + 1, 2) = arMittel(p, 1)
Cells(p + 1, 3) = arMittel(p, 2)
Cells(p + 1, 4) = arMittel(p, 3)
Cells(p + 1, 5) = arMittel(p, 4)
Next p
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array wird zur Laufzeit beschädigt
05.02.2016 18:05:47
Peter
Hallo Masl,
der Fehlercode 9 deutet eigentlich immer auf ein nicht vorhandenes Objekt hin.
Wobei meistens ein Schreibfehler in irgend einem Namen (z. B. Tabellenblatt) besteht. der durchaus in einem führenden/nachfolgenden Leerzeichen bestehen kann das Problem darstellt.
Auch deine Variablen-Definition Dim i, GESi, KKVi, d, m, h, min, minNext, ix, dNext, GES, GESd, KKVd, KKV, ih, id lässt alle Variablen als Variant erscheinen.
Vielleicht solltest du die alle gemäß ihrer Verwendung einzeln exakt definieren (Long, Double, String usw.)
Gruß Peter

AW: Array wird zur Laufzeit beschädigt
05.02.2016 18:27:35
Daniel
Hi
wie wäre es erstmal mit einer sauberen Programmierung?
warum das hier?
    For i = LBound(arDaten) + 1 To UBound(arDaten)
If i = UBound(arDaten) Then
GoTo fertig
End If
da tuts doch auch ein einfaches:

For i = LBound(arDaten) + 1 To UBound(arDaten) - 1

Abbruch-Bedinugungen mit "=" bei Gleitkommazahlen sind kritisch zu betrachten (vorallem ungerundet)
hier können schon kleine, Systembedingte Ungenauigkeiten dazu führen, dass die Gleichheit nicht erkannt wird.
zumindest sollte der Schleifenzähler hier als LONG deklariert werden.
Gruß Daniel

Anzeige
AW: Array wird zur Laufzeit beschädigt
08.02.2016 09:00:58
masl
Hallo Peter,
normalerweise deklariere ich das auch so, hier war ich etwas unter Zeitdruck.
Hallo Daniel,
danke für den Hinweis, wie angegeben, verfüge ich nur über Basiskenntnisse in VBA.
Wie ich zuvor erwähnte, lief das Makro bereits einen längerem Zeitraum ohne Probleme. Es wurden auch keine Änderungen an der Datei oder dem Makro vorgenommen.
Sollte es an der Deklarierung liegen, hätte es doch schon zu beginn zu diesen Problemen führen müssen.
Trotzdem vielen Dank für Euren Beitrag, vielleicht hat ja noch jemand eine Idee?
Gruß
masl

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige