ProgressBar

jokybordaux

Mitglied
Ich habe eine kurze Frage zur ProgressBar!
Und zwar habe ich diesen Code:


Code:
'Fortschrittsbalken initialisieren
        ProgressBarAuer.Minimum = 0
        ProgressBarAuer.Maximum = IIf(intZeilen > 0, intZeilen, 1)
        ProgressBarAuer.Value = 0

While i <> ""

            i = xlZelle.Cells(intZeilen, 2).Value                                
            PN = xlZelle.Cells(intZeilen, 1).Value                              
            ktx = xlZelle.Cells(intZeilen, 3).Value                            
            ltx = xlZelle.Cells(intZeilen, 4).Value                             
            saa = xlZelle.Cells(intZeilen, 5).Value                              
            hkz = xlZelle.Cells(intZeilen, 6).Value                             
            EH = xlZelle.Cells(intZeilen, 7).Value                               
            Ans = xlZelle.Cells(intZeilen, 9).Value                             
            BM = xlZelle.Cells(intZeilen, 8).Value                               

            If i = "0" Then                                             
                LV.DBInsertKey(PN)                                      
                LV.KTx = ktx                                           
                LV.LTxt = ltx                                          
                LV.SaA = saa                                            
                LV.HKZ = hkz                                            
                LV.EH = EH                                              
                LV.DBPut()                                            
                Kalk.DBInsert()                                         

                Kalk.BNr = BM                                           
                Kalk.Ans = Ans                                          
                LV.DBPut()                                           


            End If

            intZeilen += 1                                                     
            i = xlZelle.Cells(intZeilen, 2).Value                              

        End While
Mein Frage ist nun, wo genau ich das: ProgressBarAuer.Value += 1 in diesen Abschnitt schreiben soll, damit während ich das File schreibe, der Balken mitläuft!
Denn egal, wo ich es plaziere, kommt die Fehlermeldung, dass das ProgressBar nicht den Wert "2" annehmen kann, sondern nur einen Wert zwischen Maximum und Minimum!

lg Tina
 
Möglicherweise ist intZeilen auch 0 oder negativ, damit wird das Maximum auf 1 gesetzt und der Valuewert kann daher nicht den Wert 2 annehmen.
 
Hi.

Womit entwickelst du? Hast einen Debugger mit Breakpointfunktion zu verfügung? Benutze ihn.

Breakpoint auf die Zeile mit der Fehlermeldung, wenn er anhält schaust nach, welche Werte deine Variablen haben.

Alternativ kannst auch Debug-Ausgaben auf die Konsole machen, dann aber bitte als Konsolenprojekt kompilieren.

MfG,
Alex
 
Ich hab gesehen du zählst intZeilen am Ende der Whileschleife hoch, du hast aber deine Progressbar vor der Schleife mit dem Wert von intZeilen als Maximum gesetzt.
Als bekommst du den Fehler zwangsweise.
Du fängst ja mit intZeilen an, was gleichzeitig der Maxwert ist.
Du solltest erst einmal ermitteln wieviele Zeile du Durchlaufen willst.
Sonst hast du keine Chance richtig mitzuzählen.

Übrigends solltest du statt i <> "" auf i.length() = 0 prüfen, besser sogar noch i.trim.lengtth() = 0.
 
Das Problem ist, dass ich nie genau weiß, wieviele Zeilen ich auslese, da ich verschiedene Files auslese und die verschieden lang sind und daher unterschiedliche Anzahl von Zeilen haben.
 
Dann wirst du keine Progressbar einsetzten könne, weil es einen bekannten Endwert (Maximum) vorraussetzt.

Du kannst, dann entweder einen Durchschnittswertnehmen und dann ab Maximum einfach nicht mehr erhöhen.
Oder Du nimmst die Gesamtmöglichen Wert der Spalten, was bei Excel glaub um die 65000 sind, dann hast du das Problem des er immer viel früher fertig ist.

Letzte Möglichkeit ist, das Du einen Analyseschritt einbaust der Dir die Anzahl ermittelt.
Das kann man machen, wenn das Verhältnis gegenüber der eigentlichen Abarbeitung niedrig ist. Das musst Du aber selbst abschätzen.
 
Das klingt aber sehr komisch, dass das nicht funktionieren soll.
Ich hab nämlich eine andere Form, wo auch eine ProgressBar verwendet wird, wo man nicht weiß, wieviele Zeilen dort vorhanden sind und dort komischerweise funktioniert das.
Hier der Code für die 2. Form:
Code:
'Fortschrittsbalken initialisieren
        ProgressBarEXE.Minimum = 0
        ProgressBarEXE.Maximum = IIf(lv.Anz > 0, lv.Anz, 1)
        ProgressBarEXE.Value = 0

'Durch LV schleifen und Daten ausgeben
        Dim i As Integer, j As Integer, position As Integer, curRow As Integer
        curRow = 3              'Erste Zeile für Daten mit 3 initialisieren
        For i = 1 To lv.Anz
            lv.Rec = i          'Aktuellen Datensatz setzen

            'LV- Daten lesen und Excel zuweisen
            'PosNr (Spalte 1)
            CType(xlBlatt.Cells, Excel.Range)(curRow, 1).value = lv.PNr
            'Position (Spalte 2) immer 0
            CType(xlBlatt.Cells, Excel.Range)(curRow, 2).value = 0
            'Kurztext (Spalte 3)
            CType(xlBlatt.Cells, Excel.Range)(curRow, 3).value = lv.KTx
            'Langtext (Spalte 4)
            CType(xlBlatt.Cells, Excel.Range)(curRow, 4).value = lv.LTxt
            'Satzart (Spalte 5)
            CType(xlBlatt.Cells, Excel.Range)(curRow, 5).value = lv.SaA
            'Herkunnftskennzeichen (Spalte 6)
            CType(xlBlatt.Cells, Excel.Range)(curRow, 6).value = lv.HKZ
            'Einheit (Spalte 7)
            CType(xlBlatt.Cells, Excel.Range)(curRow, 7).value = lv.EH

            'Ggf. Kalkulationssätze lesen und an Excel übergeben
            If kalk.Anz > 0 Then
                position = 1
                For j = 1 To kalk.Anz
                    curRow += 1         'Aktuelle Zeile erhöhen
                    'K7- Zeile ausgeben
                    kalk.Rec = j        'Aktuellen Satz setzen
                    'PosNr (Spalte 1)
                    CType(xlBlatt.Cells, Excel.Range)(curRow, 1).value = lv.PNr
                    'Position (Spalte 2) 
                    CType(xlBlatt.Cells, Excel.Range)(curRow, 2).value = position
                    'Betriebsmittelnummer (Spalte 8)
                    CType(xlBlatt.Cells, Excel.Range)(curRow, 8).value = kalk.BNr
                    'Ansatz (Spalte 9)
                    CType(xlBlatt.Cells, Excel.Range)(curRow, 9).value = kalk.Ans

                    position += 1           'Wert für Position erhöhen
                Next
            End If

            'Aktuelle Zeile erhöhen
            curRow += 1

            'Fortschrittsbalken erhöhen
            ProgressBarEXE.Value += 1
        Next

        ProgressBarEXE.Value = ProgressBarEXE.Minimum
 

Neue Beiträge

Zurück