Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1044to1048
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

Progressbar Aufruf aus laufender Routine

Progressbar Aufruf aus laufender Routine
01.02.2009 19:04:09
Lutz
Hallo,
wie kann ich eine Progressbar nicht vor der eigentlichen Routine, sondern erst aus der laufenden Routine heraus starten?
Danke für die Hilfe
Lutz

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Progressbar Aufruf aus laufender Routine
01.02.2009 19:17:39
Horst
Hi,
ohne deinen Code keine zielführende Antwort möglich.
mfg Horst
AW: Progressbar Aufruf aus laufender Routine
01.02.2009 19:46:00
Lutz
Hallo Horst,
die hochgeladene Datei habe ich aus dem Forum erhalten.
So ist im Prinzip mein Code geschrieben.
Jetzt möchte ich aber nicht über einen Optionsbutton die Laufzeitanzeige starten, die dann die Routine aufruft.
Sondern es soll erst die Routine gestartet werden, nach der Ausführung einiger Codezeilen soll dann die Laufzeitanzeige aktiviert werden.
https://www.herber.de/bbs/user/58982.xls
Lutz
AW: Progressbar Aufruf aus laufender Routine
01.02.2009 19:52:00
Horst
Hi,
die Löschprozedur dauert nur einige Millisekunden, wozu soll da
eine Progressbar gut sein?
mfg Horst
Anzeige
AW: Progressbar Aufruf aus laufender Routine
01.02.2009 19:58:00
Lutz
Hallo Horst,
bitte mal den Button Progressbar anklicken.
Im Modul1 ist der Code mit Erklärung zu finden.
Lutz
AW: Progressbar Aufruf aus laufender Routine
01.02.2009 21:19:00
Daniel
Hi
du könntest dein Ziel mit folgendem Code erreichen:

Sub Progressbar1()
Dim SW As Long
Dim i As Long
Dim Schritt
Dim Länge
PB1.Show 0
SW = 3005
Länge = 0
Schritt = PB1.Label1.Width / SW
For i = 11 To SW
Cells(i, 25) = "Zeile " & i
Cells(i, 25).Interior.ColorIndex = 6
Länge = Länge + Schritt
PB1.Label2.Width = Länge
PB1.Label3.Caption = Format(i / SW, "0 %")
DoEvents
Next
Application.Wait (Now + TimeValue("0:00:2"))
Unload PB1
End Sub


den weiteren Code, der direkt der Progressbar zugeordnet ist, bitte löschen, dieses Makro reicht.
allerdings muss ich Horst recht geben, bei halbwegs intelligenter Programmierung wird die Progressbar obsolet:


Sub Progressbar2()
SW = 3005
With Cells(11, 25).Resize(SW - 10, 1)
.FormulaLocal = "=""Zeile ""&Zeile()"
.Formula = .Value
.Interior.ColorIndex = 6
End With
Gruß, Daniel

Anzeige
AW: Progressbar Aufruf aus laufender Routine
01.02.2009 22:28:15
Tino
Hallo,
verwende anstatt DoEvents, besser PB1.Repaint ist schneller.
Die Anzeige wirkt stabiler und der Mauszeiger zappelt nicht so.
Gruß Tino
AW: Progressbar Aufruf aus laufender Routine
01.02.2009 23:02:01
Lutz
Hallo Horst, hallo Daniel, hallo Tino,
danke für die Hinweise,
aber vielleicht habe ich mich auch nicht richtig ausgedrückt, das eigentliche Problem nicht richtig rübergebracht, oder wurde nicht richtig verstanden.
Ich habe die Routine mal auf das Mindeste heruntergebrochen.
Mein Problem besteht darin: wie kann ich nach starten PB1 excel dazu bewegen, die weiteren
Codezeilen auszuführen.
Sub probe ()
'diverse Codezeilen
'für Einstellung Arbeitslatt
'*********************************
'jetzt soll erst die Laufzeitanzeige starten
'*********************************
' nachfolgend die Hauptroutine
do
'************************
Aktualisierung Laufzeitanzeige
'************************
'diverse
'Codezeilen
Loop
Anzeige
AW: Progressbar Aufruf aus laufender Routine
01.02.2009 23:09:00
Lutz
Frage noch offen.
AW: Progressbar Aufruf aus laufender Routine
01.02.2009 23:10:13
Tino
Hallo,
mach dies vor bzw. nach dem Aufruf der Userform.

Private Sub CommandButton1_Click()
Call Makro1 'diverse Codezeilen
PB1.Show
Call Makro2 'diverse Codezeilen
End Sub


Gruß Tino

AW: Progressbar Aufruf aus laufender Routine
01.02.2009 23:14:26
Lutz
Hallo Tino,
dass heißt, es ist nicht möglich aus der Routine heraus die LZA zu starten?
Lutz
AW: Progressbar Aufruf aus laufender Routine
01.02.2009 23:30:02
Tino
Hallo,
doch geht auch

Sub Progressbar1()
Call Makro1 'diverse Codezeilen
SW = 3005
Länge = 0
Schritt = PB1.Label1.Width / SW
For i = 11 To SW
Cells(i, 25) = "Zeile " & i
Cells(i, 25).Interior.ColorIndex = 6
Länge = Länge + Schritt
PB1.Label2.Width = Länge
PB1.Label3.Caption = Format(i / SW, "0 %")
PB1.Repaint
Next
Call Makro2 'diverse Codezeilen
Application.Wait (Now + TimeValue("0:00:2"))
Unload PB1
End Sub


Gruß Tino

Anzeige
AW: Progressbar Aufruf aus laufender Routine
01.02.2009 23:39:00
Lutz
Hallo Tino,
danke für Deine Hilfe.
Aber das was ich machen wollte, aus der laufenden Routine die PB1 aktivieren und die Routine fortsetzten
(in einem Makro) funktioniert demnach nicht!?
Der Hinweis PB1.Repaint ist übrigens prima (:-).
Lutz
AW: Progressbar Aufruf aus laufender Routine
01.02.2009 23:53:00
Tino
Hallo,
glaube ich verstehe jetzt was Du vorhast,
Du willst während der Anzeige ein anderes Makro ausführen und
die Anzeige weiterhin aktualisieren?
Nein das geht nicht, Du musst Deinen Code in die Schleife für die Anzeige mit einbauen und die Anzeige auch noch darauf auslegen, damit diese auch richtig anzeigt.
Man kann zwar die Anzeige über eine separaten Sub steuern, und diese nur ab und zu aus den anderen Codes aufrufen, eventuell mit Übergabe irgendwelcher Werte die für die Anzeige benötigt werden, aber dies ist eine ziemliche fumlerrei.
Ich lass die Frage mal offen, bin jetzt mühte und gehe ins Bett.
Gruß Tino
Anzeige
Warum nicht die Statuszeile für ne Progressbar
03.02.2009 00:04:05
Daniel
nutzen?
ist zwar nicht so schön, aber wesentlich einfacher:
einfach dieses Makro irgendwo in einem allgemeinen Modul unterbringen und immer aufrufen, wenn sich am Programmfortschritt was ändert:

Sub Progressbar(Erfüllungsgrad As Double, Optional Segmente As Integer = 10)
Dim Anz1 As Integer
Dim Anz2 As Integer
Select Case Erfüllungsgrad
Case 0
Application.StatusBar = False
Case Else
With WorksheetFunction
Erfüllungsgrad = .Min(Erfüllungsgrad, 1)
Anz1 = Round(Erfüllungsgrad * Segmente, 0)
Anz2 = Segmente - Anz1
Application.StatusBar = .Rept(ChrW(9679), Anz1) & .Rept(ChrW(3664), Anz2)
End With
End Select
End Sub


der Erfüllungsgrad ist ein Wert von 0-1 (1 = 100% erfüllung), die Segmentanzahl kannst du beliebig von 1-x wählen, halt soviele Zeichen wie in die Statuszeile reinpassen.
zum Aktualisieren rufts du einfach das Makro auf, z.b. so:


Sub Test
dim x as long
for x = 1 to 10000
Cells(x, 1).Value = "Zeile " & x
Call Progressbar(x/10000, 100)
next
call Progressbar(0)
End Sub


mit Call Progessbar(0) wird die Statuszeile wieder für die normalen Excelmeldungen freigegeben.
Gruß, Daniel
ps leider ist die Statuszeile nur mit der Schriftart Tahoma formatierbar, daher ist es nicht ganz so leicht, passende Zeichen zu finden.

Anzeige
AW: Warum nicht die Statuszeile für ne Progressbar
03.02.2009 20:39:22
Lutz
Hallo Daniel,
danke für den Hinweis, das kann man bestimmt mal in einer Tabelle zum "Auflockern" benutzen.
Die Statusbar die z.B. beim Speichern erscheint kann man wohl nicht zweckentfremden?
Lutz
AW: Warum nicht die Statuszeile für ne Progressbar
03.02.2009 20:47:00
Dieter
Hi,
"...Die Statusbar die z.B. beim Speichern erscheint kann man wohl nicht zweckentfremden?..."
Darauf besteht programmtechnisch kein Zugriff und das aus gutem Grund, VBA ist nicht
multitaskfähig, kein also auf einmal immer nur einen Code ausführen.
mfg Dieter
AW: Warum nicht die Statuszeile für ne Progressbar
03.02.2009 20:56:00
Lutz
Hallo Dieter,
danke für den Hinweis.
Lutz

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige