Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1516to1520
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

Fortschrittsbalken um einen Loop Code

Fortschrittsbalken um einen Loop Code
28.09.2016 13:06:22
Timo
Hallo,
ich versuche seit 2 Tagen eine Progressbar um meinen vorhandenen Loop zu erstellen,
leider ohne Erfolg. Ich hoffe ihr könnt mir helfen!
Ich habe eine frmFortschritt UserForm eingefügt und diesem eine Bar und ein Text Label vergeben - der Code ist recht kurz:
'Legt den Focus auf die erste Kundennummer
Set schreibe = Worksheets("Status 11").Range("A5")
'wechselt in Tr 10
Call transaktionwechsel("10")
'bis die letzte Nummer erreicht ist
Do While Not Format(schreibe.Value) = ""
'gibt die Vertragsnnummer in der Tr 10 und wechselt auf Seite 2
Call wechselVNRKD(schreibe.Value)
Call trSeite("10", 2)
Call isyWriteToIntrasys(1187, 0, False)
'schreibe Kundennamen
Set schreibe = schreibe.Offset(0, 1)
Call lesenInFeld(schreibe, 175, 19)
'gibt die Daten mit "Enter" frei
Call schreiben(1362, "", True)
'springt in die nächste Zeile
Set schreibe = schreibe.Offset(1, -1)
Loop
Unload frmFortschritt
Call trSeite("10", 2)
wird aber solange geloopt, bis die letzte beschriebene Zeile in Spalte A erreicht ist.
Der Code wird über die aktivierung der Userform angestoßen und diese öffnet sich über einen cmdButton.
Hat jemand eine Idee?
Aktuelle Codeversion:
Option Explicit
Public SW As Long
Dim Schritt As Double
Dim Länge As Double
Dim i As Long
Sub Progressbar1()
SW = WorksheetFunction.CountA(Range("A5:A999")) 'Schrittweite festlegen
Länge = 0
Schritt = frmFortschritt.Bar.Width / SW         'Schrittbreite pro Aktualisierung
For i = 5 To SW
'Legt den Focus auf die erste Kundennummer
Set schreibe = Worksheets("Status 11").Range("A5")
'wechselt in Tr 10
Call transaktionwechsel("10")
'bis die letzte Nummer erreicht ist
Do While Not Format(schreibe.Value) = ""
'gibt die Vertragsnnummer in der Tr 10 und wechselt auf Seite 2
Call wechselVNRKD(schreibe.Value)
Call trSeite("10", 2)
Call isyWriteToIntrasys(1187, 0, False)
'schreibe Kundennamen
Set schreibe = schreibe.Offset(0, 1)
Call lesenInFeld(schreibe, 175, 19)
'gibt die Daten mit "Enter" frei
Call schreiben(1362, "", True)
'springt in die nächste Zeile
Set schreibe = schreibe.Offset(1, -1)
Loop
Unload frmFortschritt
Call trSeite("10", 2)
Länge = Länge + Schritt
frmFortschritt.Width = Länge
frmFortschritt.Text.Caption = Format(i / SW, "0 %")
DoEvents
Next
Application.Wait (Now + TimeValue("0:00:2"))
Unload frmFortschritt
End Sub
leider bekomme ich die Fehlermeldung, dass "Set schreibe = Worksheets("Status 11").Range("A5")" - Variable nicht definiert
Vielen Dank für eure Mühen...
Timo

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fortschrittsbalken um einen Loop Code
28.09.2016 13:52:03
Christian
hallo Timo,
den Code hab ich jetzt nur kurz überflogen, die fehlende Deklaration ist mir dabei gleich aufgefallen.
ja, die Fehlermeldung ist korrekt, denn die Variable "schreibe" ist in deinem Code nicht deklariert.
Abhilfe: deklariere die Variable
Tipp allg: Verwende kein deutschen Variablennamen, insbesonsere keine Umlaute. Das funktioniet zwar im Allgemeinen, ergibt aber ein Kauderwelsch. VBA spricht englisch.
Grüße
Christian
AW: widerspruch zum Tip...
28.09.2016 13:59:05
Daniel
ich verwende eigentlich immer deutsche Variablennamen, gerade weil VBA englisch spricht.
so kann man nämlich viel einfacher unterscheiden, was man selbst erstellt hat und was von VBA kommt. Außerdem ist so das Risiko geringer, dass man als Bezeichnung einen schon vorhandenen VBA-Schlüsselbegriff verwendet, das dann zu noch mehr Verwirrung und tatsächlichen Fehlern führen kann.
Gruß Daniel
Anzeige
AW: widerspruch zum Tip...
28.09.2016 15:01:06
Christian
Hallo Daniel,
nein, da bin ich nicht bei dir.
Denn morgen recherchierst du ggf. für ein spezielles Problem im Internet und findest dann einen annähernd passendes Bsp. auf spanisch, französisch oder swedisch, verstehst es aber nicht, da die Variablennamen für dich nur böhmische Dörfer sind.
Und falls du heute oder morgen in einer international tätigen Firma arbeitest, wie willst du dann deinen Code an die Kollgen vermitteln?
Bei VBA halte ich mich daher an die ungarische Notation mit entsprechendem Präfix (lng, str, vnt, obj, etc.) und einem ggf. gekürzten Namen in englisch (Bsp: vntRes = Variant-Result, wksDest = Worksheet-Destination, etc.). Somit ist auch die irrtümliche Verwendung von VBA-Schlüsselbegriffen kein Thema.
bei VB.Net kann man auf die veraltete ungarische Notation verzichten, da der Editor von Visual-Studio den Variablentyp beim "Mouseover" anzeigt. In Office-VBA mit dem betagten VBE funktioniert das aber nicht. Aber auch in VB.Net und in jeder anderen Programmiersprache ist es erforderlich, dass dein Code von den Kollegen in der Welt verstanden werden kann.
mit diesem Prinzip bin ich immer gut gefahren, und habe seit der Umsetzung keine Fragen mehr hinsichtlich Verständmis der Variabelnnamen von meinen Kollegen erhalten.
Grüße
Christian
Anzeige
AW: widerspruch zum Tip...
01.10.2016 12:11:30
Daniel
Hi
Ich halte es für höchst unwahrscheinlich, dass ich bei meinen Recherchen auf schwedische oder böhmische Quellcodes stoße, weil die Schlagwörter der Suche ja in der Regel nicht im Quellcode, sondern im beschreibenden Text stehen und dieser wäre dann ja auch in der entsprechenden Sprache geschrieben.
Doch auch wenn ich so eine Seite finden würde, würde sie mir nicht weiterhelfen, weil ich den beschreibenden Text nicht lesen kann. Die Variblennamen wären da noch das kleinste Problem.
Gruß Daniel
AW: Fortschrittsbalken um einen Loop Code
28.09.2016 14:05:31
Timo
Hallo Christian,
die Variable ist in einem anderen Modul deklariert und stammt nicht von mir :P unser Host System aus dem hier Daten ausgelesen werden funktioniert aber nur mit 2-3 freigegebenen Excel-Mappen...
Ohne das ganze Fortschrittsgebastel, arbeitet der Loop super. Also scheint es kein generelles Problem der Deklaration zu sein :(
Muss ich eventuell Code und Progressbar trennen? Aber wie schaffe ich es dann, dass der Loop den Progress vorrantreibt.
In meinen Gedanken lässt sich das Problem lösen, indem ich die Progressbar ausbaue und in den Loop etwas einfüge wie : nimm die anzahl der gesamten belegten Zeilen in A und rechne nach jedem loop +1, bis die maximale anzahl erreicht ist
Grüße
Timo
Anzeige
AW: Fortschrittsbalken um einen Loop Code
28.09.2016 14:07:44
Daniel
Hi
wenn ich eine Fortschrittsbalken per Userform erstellen will, gehe ich immer so vor:
1. die Userform enthält nur die Progressbar und ggf ein Label für den Infotext
2. die Userform enthält keinen Code
3. die Userform hat die Eigenschaft: ShowModal:=False
4. der komplette Code steht in einem allgemeinen Modul
5. vor der Bearbeitungsschleife wird die Userform geöffnet und die Min-Max-Werte für die Progressbar gesetzt.
6. in der bearbeitungsschleife wird dann der .Value-Wert der Progressbar entsprechend dem Fortschritt gesetzt:

Userform1.Show 0
Userform1.Progressbar1.Min = 0
Userform1.Progressbar1.Max = 100
Do
hier die bearbeitungsschritte
Userform1.Progressbar1.Value = Fortschrittswert (zwischen Min und Max)
Loop
Unload Userform1
Generell kann eine Progressbar nur dann sinnvoll eingesetzt werden, wenn schon vorher bekannt ist, wieviele Umläufe die Schleife machen wird, dh dann wenn man auch For-Next einsetzen kann und nicht Do-Loop verwenden muss.
Gruß Daniel
Anzeige
AW: Fortschrittsbalken um einen Loop Code
28.09.2016 14:12:53
Timo
Hallo Daniel,
vielen Dank erstmal!
die Maximale Anzahl an durchläufen wird in meinem Fall durch WorksheetFunction.CountA(Range("A5:A999")) festgelegt.
Wie bekomme ich meinen Loop nun aber dazu nicht immer den selben Wert als Value einzutragen, sondern diesen fortlaufend zu erhöhen oder innerhalb des min max immer weiter zu bilden?
Ideen? :P
Gruß Timo
AW: Fortschrittsbalken um einen Loop Code
28.09.2016 14:20:55
Daniel
Zeig mal deine Datei.
Gruß Daniel
AW: Fortschrittsbalken um einen Loop Code
28.09.2016 14:30:49
Timo
Ich darf diese leider nur gekürzt zur verfügung stellen...
https://www.herber.de/bbs/user/108484.xls
aber alles wichtige sollte drin sein :D
Danke
Anzeige
AW: Fortschrittsbalken um einen Loop Code
28.09.2016 14:39:56
Daniel
der Inhalt ist mir auch egal.
es sollte halt soweit alles vorhanden und lauffähig sein, dass der von dir beschriebene Fehler erzeugt werden kann.
Wenn du allerdings den Schreibschutz auf dem VBA-Projekt drauf lässt, wird es verdammt schwer dir zu helfen.
Gruß Daniel
AW: Fortschrittsbalken um einen Loop Code
28.09.2016 15:01:55
Daniel
Hi
was ich bisher feststellen konnte:
1. die SUB code muss Public sein, damit du sie von einem Makro, welches sich in einem anderen Modul befindet, aus gestartet werden kann.
als Private deklarierte Subs oder Functions können nur von Subs im selben Modul aufgerufen werden.
2. die Sub/Function isyWriteToIntrasys ist nicht vorhanden.
solche Kleinigkeiten solltest du vorab bereinigen (das geht auch bei VBA-Bescheiden)
Wie gesagt, der Code sollte soweit lauffähig sein, dass man das von dir beschriebene Problem auch erzeugen kann.
Gruß Daniel
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige