Home Office-Hilfe.com - Wir lösen Ihr Problem mit Microsoft Excel, Word, Outlook, PowerPoint, Access gratis Forum Impressum

 [Excel 2003] Arrayindex hat anderen Wert, als der zugewiesene.
Neues Thema eröffnenNeue Antwort erstellen
Autor Nachricht
Lolli
Newbie
Newbie


Anmeldedatum: 28.07.2008
Beiträge: 19
Wohnort: BW

BeitragVerfasst am: 30.07.2008, 13:15 Nach oben

Heyho, diesmal ein anderes Problem. Hier der Code[einige Sachen rausgeschnitten]

Code:
Dim ticketnummer(6500) as Double
Dim creationdate(6500) As Date
Dim creationtime(6500) As Date
Dim solveddate(6500) As Date
Dim solvedtime(6500) As Date
Dim gebrauchtetage(6500) As Integer

Dim zeile As Integer
Dim spalte As Integer
Dim arrayindex As Integer
Dim vlauf As Integer

zeile = 2
spalte = 1
arrayindex = 0

For i = 0 To 10000 Step 1
   
    'Falls in Tickernummer nichts drinne steht bricht er die Schleife ab
    If Cells(zeile, 1) = "" Then
   
        Exit For
       
    End If
   
    vlauf = 0
   
    'Hier schaut er jeweils in Ticketnummer rein und ob sie vorhanden ist[6500 weil array 6500 speicherplätze hat]
    For y = 0 To 6500 Step 1
   
        'Falls Ticketnummervorhanden ist, geht er raus, weitere Sachen kommen in die Schleife 1
        If Cells(zeile, 1) = ticketnummer(vlauf) Then
            Exit For
           
        'Wenn der Index keinen Wert hat, wird Ticketnummer eingespeichert
        ElseIf ticketnummer(vlauf) = 0 Then
           
            ticketnummer(arrayindex) = Cells(zeile, 1)
            creationdate(arrayindex) = CDate(Cells(zeile, 2))
            creationtime(arrayindex) = CDate(Cells(zeile, 3))
            solveddate(arrayindex) = CDate(Cells(zeile, 5))
            solvedtime(arrayindex) = CDate(Cells(zeile, 6))
                       
            'Wenn CreationTime kleiner als 8:30 wird es auf 8:30 aufgerundet oder über 17:30 dann wird es auf 8:30 des nächsten Tages aufgerundet
            If creationtime(arrayindex) < "8:30" Then
                creationtime(arrayindex) = "8:30"
            ElseIf creationtime(arrayindex) > "17:30" Then
                creationtime(arrayindex) = "8:30"
                creationdate(arrayindex) = creationdate(arrayindex) + 1
            End If
           
            'Speicherplatzzahl wird um eins addiert, für nächste Daten
            arrayindex = arrayindex + 1
            Exit For
           
        Else
        vlauf = vlauf + 1
        End If
       
    Next
        'reporttime+reportdate wert geben, falls in der zeile der variable nichts drin steht, lässt er wert drinne
        If Cells(zeile, 9) <> "" Then
            reporttime = Cells(zeile, 9)
        End If
        If Cells(zeile, 10) <> "" Then
            reportdate = Cells(zeile, 10)
        End If

Das war die Zuweisung, das klappt auch einwandfrei.
Wenn ich jedoch den Code ausführe, meckert er beim 1542. Index rum.


End If nicht dabei, weil Schleife noch weiter geht aber nicht relevant
Code:
If solveddate(arrayindex - 1) <> "0:00:00" Then
               
            Do While solveddate(arrayindex - 1) <creationdate> 23.07.2008.
                creationdate(arrayindex - 1) = creationdate(arrayindex - 1) + 1
                gebrauchtetage(arrayindex - 1) = gebrauchtetage(arrayindex - 1) + 1
            Loop

Wie kommt er auf die Zahl 11.04.2098?
Davor klappt ja es super warum dort nicht[Das Datum 23.07.2008 wurde auch schon öfters eingesetzt?

_________________
Wenn eine Taube durch den Rauch fliegt,
behindert der Rauch die Taube oder verletzt die Taube den Rauch?
Benutzer-Profile anzeigenPrivate Nachricht senden
miriki
Schlauberger
Schlauberger


Anmeldedatum: 05.03.2007
Beiträge: 439
Wohnort: Kiel

BeitragVerfasst am: 31.07.2008, 07:12 Nach oben

Lolli hat Folgendes geschrieben:
Wie kommt er auf die Zahl 11.04.2098?

Ich hab's mir jetzt nicht in alle Details angesehen, aber mir fällt auf:

11.04.2098 minus 23.07.2008 ergibt 32769, was also irgendwie auf den Überlauf eines Integer-Werts hindeutet. Vielleicht bringt Dich das ja schon auf die richtige Spur.

Gruß, Michael
Benutzer-Profile anzeigenPrivate Nachricht sendenICQ-Nummer
Lolli
Newbie
Newbie


Anmeldedatum: 28.07.2008
Beiträge: 19
Wohnort: BW

BeitragVerfasst am: 31.07.2008, 08:11 Nach oben

Hey miriki,

schreibe jetzt mal ohne Arrayindex, da es nur um den gleichen Arrayindex geht.

Du hattest Recht, er spinnt rum weil die Variable 'gebrauchtetage' den Wert 32767 und dann die Fehlermeldung Überlauf kommt.

Dieser Fehler tritt auf da 'solveddate' unter 'creationdate' liegt würde bedeuten, das Ticket wurde gelöst bevor es überhaupt erstellt worden ist.
Der einzige Knackpunkt an der Sache ist, das er bei der Zuweisung
(wenn ich über die Maus drüber gehe bei
Code:
creationdate(arrayindex) = CDate(Cells(zeile, 2))

Steht bei der rechten Seite 23.07.2008 aber irgendwie speichert er 11.04.2098 und das seltsame ist ja, bei den ganzen anderen Indexen hat es ja auch geklappt.

Habe außerdem, einfach mal die Zeile gelöscht, bei dem der Fehler auftrat und der Fehler kommt wieder jedoch bei 1500 Zeilen später und ich wunder mich jetzt, was macht VBA / die Zelle das sie den Wert einer Zelle ändert.

Gruß

Philipp

_________________
Wenn eine Taube durch den Rauch fliegt,
behindert der Rauch die Taube oder verletzt die Taube den Rauch?
Benutzer-Profile anzeigenPrivate Nachricht senden
Lolli
Newbie
Newbie


Anmeldedatum: 28.07.2008
Beiträge: 19
Wohnort: BW

BeitragVerfasst am: 31.07.2008, 08:34 Nach oben

So hab meinen Fehler entdeckt.

Das Problem war:

bei der Zeile wurde das Ticket um 18:22 am 23.07.2008 erstellt.
und es wurde um 18:44 am 23.07.2008 gelöst.

Jedoch tue ich ja bei meiner Überprüfung wenn die Uhrzeit über 17:30 ist creationday + 1 addieren und die Uhrzeit auf 8:30 stellen, indemfall 8:30 am 24.07.2008.

Und jetzt überprüft ja mein Programm ob 'creationdate' und 'solveddate' gleich ist und da dies nicht der Fall ist, addiert er immer 'creationdate' + 1 und überprüft wieder.
Immer wenn 'creationdate' + 1 addiert wird, wird die int Variable 'gebrauchtetage' auch um + 1 addiert und dann kommt halt nach 32.767 mal die Fehlermeldung Überlauf.
Und beim Debuggen seh ich ja den "Jetzt"-Zustand der Variabeln und 'creationdate' wurde halt ja 32.767 addiert und ist deshalb "11.04.2098".

Gruß

Philipp

_________________
Wenn eine Taube durch den Rauch fliegt,
behindert der Rauch die Taube oder verletzt die Taube den Rauch?
Benutzer-Profile anzeigenPrivate Nachricht senden
miriki
Schlauberger
Schlauberger


Anmeldedatum: 05.03.2007
Beiträge: 439
Wohnort: Kiel

BeitragVerfasst am: 31.07.2008, 09:00 Nach oben

Lolli hat Folgendes geschrieben:
Code:
Dim gebrauchtetage(6500) As Integer
[...]
            Do While solveddate(arrayindex - 1) <creationdate> 23.07.2008.
[...]
                gebrauchtetage(arrayindex - 1) = gebrauchtetage(arrayindex - 1) + 1
            Loop

[...]

Irgendwo in diesem Konstrukt müßte es ja liegen. "gebrauchtetage" ist als integer deklariert und innerhalb dieser Schleife wird addiert, was zum Überlauf führt.

Also wird zu oft addiert... Warum? Die Abbruch-Bedingungen der Schleife passen nicht. Also müßte an denen gedreht werden bzw. zusätzliche Sicherheits-Abfragen eingefügt werden.

Bei EndeDatum<AnfangsDatum würde ich vor Eintritt der Schleife irgendeine Aktion durchführen, damit es nicht zur Endlos-Schleife kommt. Hier wäre eine Fehlermeldung (msgbox) möglich und/oder das stillschweigende Setzen des EndeDatum=AnfangsDatum möglich.

Ich muß zugeben, daß mir die Syntax "Do While x < y > z" nicht wirklich geläufig ist. Ich interpretiere mal auf "Do While (x < y) And (x > z)", aber bin mir dabei nicht ganz sicher. Denn die Interpretation "Do While x < (y > z)" wäre auch möglich und verbiegt mir gerade etwas zu sehr die Hirnwindungen (Datumswert x mit Booleanwert y>z vergleichen). Wink

Gruß, Michael
Benutzer-Profile anzeigenPrivate Nachricht sendenICQ-Nummer
Lolli
Newbie
Newbie


Anmeldedatum: 28.07.2008
Beiträge: 19
Wohnort: BW

BeitragVerfasst am: 31.07.2008, 09:29 Nach oben

Hey miriki,
Sollte normalerweise so sein:

Code:
Dim gebrauchtetage(6500) As Integer
[...]
            Do While solveddate(arrayindex - 1) <> creationdate(arrayindex - 1).
                gebrauchtetage(arrayindex - 1) = gebrauchtetage(arrayindex - 1) + 1
                creationdate(arrayindex - 1) = creationdate(arrayindex - 1) + 1
            Loop


Habs jetzt dann so gelöst:

Er guckt immer, ob 'solveddate' kleiner ist als 'creationdate' + zahl
[je nach status]. So kann nichts schiefgehen^^

_________________
Wenn eine Taube durch den Rauch fliegt,
behindert der Rauch die Taube oder verletzt die Taube den Rauch?
Benutzer-Profile anzeigenPrivate Nachricht senden
Beiträge der letzten Zeit anzeigen:      
Neues Thema eröffnenNeue Antwort erstellen


Ähnliche Beiträge
Thema Autor Forum Antworten Verfasst am
Keine neuen Beiträge Eine Auswahlliste mit Verknüpfung zu ... anscfz06 Microsoft Excel Hilfe 4 19.11.2008, 22:36 Letzten Beitrag anzeigen
Keine neuen Beiträge Anzahl an Zeichen abhängig von Wert g... woerli Microsoft Excel Hilfe 1 13.11.2008, 13:24 Letzten Beitrag anzeigen
Keine neuen Beiträge Verweis auf Literaturverzeichnis in e... Stroemung Microsoft Word Hilfe 0 04.11.2008, 09:00 Letzten Beitrag anzeigen
Keine neuen Beiträge Wert zweier Zellen vergleichen und dr... Frederic Microsoft Excel Hilfe 4 31.10.2008, 14:07 Letzten Beitrag anzeigen
Keine neuen Beiträge Excel 20078 - Zeilen ausblenden, wenn... Aithnea Microsoft Excel Hilfe 21 30.10.2008, 10:38 Letzten Beitrag anzeigen


 Gehe zu:   



Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen

Haftungsausschluss/Disclaimer


SMS kostenlos versenden | Battle-Dream | Tuning Forum | Join the YoungGeneration | krankenversicherungsvergleich | Kalorienarme Rezepte!
Versicherungsvergleich | Bürobedarf | Papier | Betten

Ranking-Hits



Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Alle Zeiten sind GMT + 1 Stunde
Deutsche Übersetzung von phpBB.de