Office: Arrayindex hat anderen Wert, als der zugewiesene.

Helfe beim Thema Arrayindex hat anderen Wert, als der zugewiesene. in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Heyho, diesmal ein anderes Problem. Hier der Code[einige Sachen rausgeschnitten] Dim ticketnummer(6500) as Double Dim creationdate(6500) As Date... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Lolli, 30. Juli 2008.

  1. Lolli Erfahrener User

    Arrayindex hat anderen Wert, als der zugewiesene.


    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?
     
    Lolli, 30. Juli 2008
    #1
  2. miriki Erfahrener User
    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
     
    miriki, 31. Juli 2008
    #2
  3. Lolli Erfahrener User
    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
     
    Lolli, 31. Juli 2008
    #3
  4. Lolli Erfahrener User

    Arrayindex hat anderen Wert, als der zugewiesene.

    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
     
    Lolli, 31. Juli 2008
    #4
  5. miriki Erfahrener User
    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). ;-)

    Gruß, Michael
     
    miriki, 31. Juli 2008
    #5
  6. Lolli Erfahrener User
    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^^
     
    Lolli, 31. Juli 2008
    #6
Thema:

Arrayindex hat anderen Wert, als der zugewiesene.

Die Seite wird geladen...
  1. Arrayindex hat anderen Wert, als der zugewiesene. - Similar Threads - Arrayindex Wert zugewiesene

  2. Wenn ein Wert ein einer Spalte, dann komplette Zeile im anderen Blatt untereinander einfügen.

    in Microsoft Excel Hilfe
    Wenn ein Wert ein einer Spalte, dann komplette Zeile im anderen Blatt untereinander einfügen.: Hallo, kann mir jemand bitte bei folgenderm Helfen. Habe etwas ähnliches gefunden was ich brauche, nur noch eine kleine Änderung ist notwendig. Aufgabe: Es wird geprüft, ob in Spalte Q ein Wert...
  3. Abfrageergebnis soll keine doppelten Werte enthalten

    in Microsoft Access Hilfe
    Abfrageergebnis soll keine doppelten Werte enthalten: Ich suche nach einer Lösung für folgendes Problem. In einer Tabelle werden Abwesenheiten erfasst. Verknüpft mit einer Mitarbeitertabelle. So erhalte ich eine Übersicht welcher Mitarbeiter aus...
  4. Teilstring einer Zelle auf Wert aus anderer Zelle überprüfen

    in Microsoft Excel Hilfe
    Teilstring einer Zelle auf Wert aus anderer Zelle überprüfen: Hallo zusammen, ich habe in einer Excel-Tabelle in zwei Tabellenblätter. Tabellenblatt "Artikelstamm" beinhaltet in Spalte A eine Artikel-Nr. und diverse weitere Spalten. Hier ein kleiner Auszug:...
  5. konti aufzählung und wert gleicher konti zusammenfassen

    in Microsoft Excel Hilfe
    konti aufzählung und wert gleicher konti zusammenfassen: hallo ich möchte eine automatische konti aufzählung aller gleichen konti und gleichzeitig die werte gleicher konti zusammenfassen (rot sind die zahlen, welche ich errechnen lassen möchte) danke...
  6. Werte zusammenzählen - ab einer Zelle die nächsten 5

    in Microsoft Excel Hilfe
    Werte zusammenzählen - ab einer Zelle die nächsten 5: Hallo. ich würde gerne eine bestimmte Menge an Zellen zusammenzählen. Genau gesagt: Wenn in einer Zelle (A1) die Zahl 5 steht dann soll Excel ab B2 die nächsten 5 Werte zusammenzählen. Wenn...
  7. Bedingte Formatierung basierend auf Wert anderer Zelle

    in Microsoft Excel Hilfe
    Bedingte Formatierung basierend auf Wert anderer Zelle: Hallo zusammen, beim Erreichen des 18. Lebensjahres (Geburtsdatum Spalte D, Alter automatisch in Spalte E kalkuliert) soll eine bedingte Formatierung den Namen und Vornamen der Teilnehmer (Spalte...
  8. Summieren an Hand der letzten x Datums Werte und mit weiteren Kriterien

    in Microsoft Excel Hilfe
    Summieren an Hand der letzten x Datums Werte und mit weiteren Kriterien: Schönen guten Abend, Wie kann man am besten Summieren mit mehreren Kriterien eines soll davon das Datum sein. So das vom Aktuellen Letzten Datums Wert aus gehent die letzten Bsp. 10 Werte...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden