Ladebalken mit % Anzeigen soll nicht immer bei 0 % beginnen

  • Excel

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Ladebalken mit % Anzeigen soll nicht immer bei 0 % beginnen

    Im Anhang ein kleiner Teil meines Programmes (2 Schleifen) was in Wirklichkeit aus ca. 10 Schleifen besteht.

    Da das Programm in Wirklichkeit sehr lange läuft möchte ich den Fortschritt anhand von zwei Ladebalken sehen.

    Im oberen Ladebalken soll immer die aktuelle Schleife von 0 % bis 100 % angezeigt werden.
    Im unteren Ladebalken soll der % Stand des kompl. Programmes angezeigt werden.
    Das funktioniert auch alles bis auf die % Anzeige im unteren Ladebalken. Der untere Ladebalken fängt in der 1. Schleife ganz links an und endet bei 1/10 der Wegstrecke. In der 2. Schleife macht er dort weiter und fährt bis 2/10 der Wegstrecke. Nur die % Anzeige fängt leider immer bei 0% an. Ich möchte das natürlich wie beim Ladebalken haben. Also 1. Schleife von 0 % bis 10 % und 2. Schleife von 10 % bis 20 %.
    Ich habe schon in der 2. Schleife die Formel für Label5 mehrfach geändert. Es kam aber nichts Sinnvolles dabei raus.
    Am nächsten dran bin ich, wenn ich statt 0% --> 10% schreibe (rot). (Siehe Auszug aus Programm). Dann läuft er von 11% bis 16 % hoch und springt dann leider auf 110%

    Visual Basic-Quellcode

    1. Länge2 = Länge2 + (Schritt1 / 10)
    2. Ladebalken.Label5.Width = Länge2
    3. Ladebalken.Label6.Caption = Format(a / SW / 10, "10 %")
    4. DoEvents


    Die If Schleifen sollen Euch erst einmal nicht stören.
    Er vergleicht in der 1. Schleife Tabelle1 Spalte A & Spalte B mit Tabelle2 Spalte A & Spalte B und in der 2. Schleife Tabelle1 Spalte A & Spalte B mit Tabelle3 Spalte A & Spalte B. Bei übereinstimmung kopiert er aus jeweils aus Tabelle1 & Tabelle2 Spalte C nach Tabelle1 Spalte C.
    Lg Wolfgang
    Dateien
    • Test.xls

      (299,11 kB, 13 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Parawolli“ ()

    Wenn Du eine feste Anzahl und Abfolge von Schleifen hast, die sich nicht zu einer Schleife kombinieren lassen, musst Du eben ein festes Offset, also quasi einen Startwert mitgeben. In Zeile#104 in Deinem Projekt:
    Ladebalken.Label6.Caption = Format(a / SW / 10 + 0.1, "0 %")
    Dabei entspricht dieses 0.1 die bis dahin erreichten 10%.

    btw:

    Parawolli schrieb:

    Die If Schleifen sollen Euch erst einmal nicht stören.
    Es gibt keine IF-Schleifen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Hey super funktioniert und ich war so nah dran.
    Hatte in Zeile 104 auch mal folgenden Code ausprobiert.

    Visual Basic-Quellcode

    1. Ladebalken.Label6.Caption = Format((a + 0.1) / SW / 10, "0 %")


    Eine Frage noch! Durch die Ladebalken verlangsamt sich das Programm ziemlich, weil das Programm natürlich zusätzliche Rechenoperationen machen muss.
    Es gibt wahrscheinlich keine Möglichkeit einen Ladebalken zu integrieren, der das Programm nicht verlangsamt. Oder?
    Ich frage deshalb weil beim installieren von Programmen z.B. unter Windows die Programmierer auch immer einen Ladebalken einbauen. Wird dadurch nicht auch die Installation langsamer?

    Vielen Dank
    Wolfgang

    P.S. Ich meinte die If Schleifen für das Kopieren und einfügen. Die haben aber mit dem Ladebalken nichts zu tun. Hätte ich besser weg gelassen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Parawolli“ ()

    [Spekulatiusmodus an]
    Die Ladebalken von Installationsprogrammen laufen in nem anderen Thread als das Kopieren. Balken im Haupt-/GUI-thread und das eigentlich rechenaufwendige Kopieren in einem Nebenthread. Aber dafür ist Excel (m.E.) nicht ausgelegt. Aber: Sicher, dass das so lange dauert? Mach mal ne Messung mit und ohne Balkenaktualisierung.
    [Spekulatiusmodus aus]
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Parawolli schrieb:

    Jede With Schleife
    Was ist eine With-Schleife? Meintest du While?
    Wie @VaporiZed bereits angemerkt hat, nicht jedes Konstrukt, das Code beinhaltet darf sich Schleife nennen. Dazu muss dieses Konstrukt den Code den es beinhaltet u.U. mehrfach ausführen können.
    Post-AGB:
    §1 Mit dem Lesen dieses Posts stimmst du den AGB unverzüglich zu
    §2 Ein Widerruf muss innerhalb von 3 Sekunden nach Lesen des Hauptbestandteil des ersten jemals gelesenen Posts erfolgen
    Abs.1 Die Signatur zählt nicht zum Hauptbestandteil des Posts
    §3 Ein erfolgreicher Widerruf zwingt zu einem Besuch bei einem Hypnotiseur oder Neurochirurg, sodass der gelesene Text aus den Erinnerungen entfernt werden kann
    Abs.1 Die Kosten und Risiken sind jeweils selbst zu tragen

    VaporiZed schrieb:

    Aber dafür ist Excel (m.E.) nicht ausgelegt
    Multithreading im eigentlichen Sinne gibt es in Excel nicht.
    Aber du kannst per API-Timer deine Werte pollen und den "ProgressBar" aktualisieren.
    vbarchiv.net/api/api_settimer.html
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --