Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen

Zeitgesteuerte Progressbar

Betrifft: Zeitgesteuerte Progressbar von: Christian
Geschrieben am: 26.10.2014 12:52:22

Hallo liebe Gemeinde,

ich brauche Hilfe bei folgender Datei die ich vor einiger Zeit vom lieben Franz bekommen hab, an dieser Stelle nochmals vielen Dank und liebe Grüße!

https://www.herber.de/bbs/user/93032.xlsm

Folgendes würde ich gerne ausprobieren:

Beim Start der Datei öffnet sich autoatmisch die Userform zu der Progressbar, was absolut super ist und auch so bleiben soll.

Wäre es möglich die Userform der Progressbar erscheinen zu lassen, die eigentliche Progressbar wird aber erst nach 8 Sekunden aktiviert und beginnt dann daruchzulaufen?
Der Durchlauf soll innerhalb von 2 Sekunden durchlaufen, dient nur als optische Signalgebung für den Anwender.

Vielen Dank schonmal im Vorfeld für jede Hilfe und Input!

Liebe Grüße,

Christian

  

Betrifft: AW: Zeitgesteuerte Progressbar von: Mullit
Geschrieben am: 26.10.2014 21:41:32

Hallo,

ich hab' Dir die Änderungen mal eingebaut:

https://www.herber.de/bbs/user/93385.xlsm

Gruß,


  

Betrifft: AW: Zeitgesteuerte Progressbar von: Christian
Geschrieben am: 26.10.2014 23:01:18

Hallo,

funktioniert alles wie gehofft! Vielen vielen Dank!

Gruß,

Christian


  

Betrifft: AW: Zeitgesteuerte Progressbar von: Luschi
Geschrieben am: 27.10.2014 04:46:31

Hallo Christian,

sicher klappt das so. Solltest Du vorhaben, nach dem Öffnen der Exceldatei Daten aus Access oder sonstwoher in Excel zu übernehmen, dann muß die Progreßbar in diesen Datenübernahme-Prozess integriert werden, ansonsten bleibt es eine nette Spielerei.
Diese Codezeile: Application.OnTime EarliestTime:=Start_OnTime, Procedure:="Userform2_anzeigen"
übergibt den Timingprozeß an Windows, wird dort in die Prozesse der zeitgesteuerten Abläufe mit der niedrigsten Ausführungsstufe eingeordnet und von Windows auch ausgelöst.
Was aber Du sicher willst ist Folgendes:
- Menge der zu übertragenden Daten ermitteln
- nach x% von 100% die Progreßbar-Anzeige aktualisieren
- neuen Datenblock abrufen usw.

Wenn Du das mit einer normalen Excel-Aktualisierungsabfrage machen willst, kann man aber die Progreßbar darin nicht einbinden. Hier muß man per Vba selbst Hand anlegen.
Alles andere ist nur Effekthascherei, sieht für den User beeindruckend aus, ist aber für den eigentlichen Hauptprozeß total unwirksam und verzögert den Startprozeß zur Arbeitsaufnahme durch den User um weitere Sekundeneinheiten (wird ja erst nach der schon stattgefundenen Datenübernahme ausgelöst).

Gruß von Luschi
aus klein-Paris




  

Betrifft: AW: Zeitgesteuerte Progressbar von: Christian
Geschrieben am: 27.10.2014 09:39:09

Hallo Luschi,

vielen Dank für deinen Input.
In der Tat kommt es dem was ich eigentlich möchte sehr nahe, nur sagte man mir, dass das nicht möglich sein.
Die Daten werden aus einer Access-Datenbank gezogen. Die Progress sollte anzeigen wie lange der Vorgang noch dauert. In der Regel dauert diese Aktualisierung beim Start 8 sekunden. Die 2 sekunden progress bar sind nur optische spielerei damit der Nutzer weiß, wann die aktualisierung abgeschlossen ist.

Natürlich häte ich das gerne anders, nicht nur als spielerei, aber dafür reichen meine Kenntnisse leider nicht aus....
Falls du da mehr weißt, würde ich mich natürlich freuen wenn du mir da helfen könntest :)

Gruß,

Christian


  

Betrifft: AW: Zeitgesteuerte Progressbar von: Luschi
Geschrieben am: 28.10.2014 08:25:44

Hallo Christian,

ich will Dir dabei gerne helfen. Dazu muß man die in Excel erstellte Datenbankabfrage umwandeln in ein Recorset. Da man von der Abfrage ja so nichts sieht muß man das per Vba machen.
Zunächst muß aber Folgendes ermittelt werden:
- sind die abgerufenen Daten in der Tabelle als ListObjekt (Als Tabelle formatieren)definiert
- wenn ja, dann passiert das automatisch bei der Abfrageerstellung durch Excel
- das hat man seit Excel 2007 so integriert
Dann mache Folgendes:
- die Tabelle aktivieren in der die Ergebnisse der Abfrage angezeigt werden
- Cursor in eine Zelle der Daten setzen
- in der Menüleiste auf 'Entwurf' klicken
- Name des ListObjekts sich merken
- diese Prozedur in ein neues Modul kopieren

Sub Schritt_1b()
    'wenn in der Tabelle ein Listen-Objekt existiert: 'Als Tabelle formatieren'
    'Query-Abfrage des List-Objekts ermitteln und den Namen ins Direktfenster schreiben
    Dim liObj As ListObject
        
    'hier den Namen des Listobjektes korrekt aktualisieren
    Set liObj = ActiveSheet.ListObjects("Tabelle_Artikel.accdb3")
    
    Debug.Print liObj.QueryTable.SourceDataFile
    Debug.Print liObj.QueryTable.CommandText
    Debug.Print liObj.QueryTable.Connection
    Set liObj = Nothing
End Sub
- Cursor in die letzte Vba-Zeile vor 'End Sub' setzen und die F9-Taste drücken.
- dadurch erscheint ein rot/brauner Haltepunkt
- über die Menüleiste des Vba-Editors Ansicht-Überwachungsfenster wählen
- im Quellcode das Wörtchen 'liObj' markieren und bei gedrückter linker Maustaste in das Überwachungsfenster ziehen
- mit dem Cursor wieder in das Programmfenster klicken
- jetzt mit der F5-Daste das Progrämmchen starten
- wenn die gelbe Markierungszeile erscheint, im Überwachungsfenster das 'liObj' öffnen
- und sich durchhangeln zu folgenden Einträgen:
Wenn Dir das gelungen ist, hast Du genau die Angaben, die man braucht, um aus der eigentlich unsichtbaren Excel-Access-Abfrage per Vba ein RecordSet-Objekt zu erzeugen, in dem man dann beim Schreiben der Daten in die Tabelle die Progreßbar einbinden kann.
Eigentlich liefern ja schon die 3 'Debug.Print'-Befehle die nötigen Angaben, aber ich wollte Dir auch zeigen, was man im Vba-Editor so noch alles anstellen kann.
Ich hoffe Du schmeißt jetzt nicht die Flinte ins Korn sondern ich habe Dein Ergeiz geweckt.
Den eigentlichen Programmcode dazu schicke ich Dir als Musterbeispiel, wenn Du mir auch so eine Grafik zurückpostest, damit ich sehe, daß Du es bis dahin geschaft hast.



  

Betrifft: AW: Zeitgesteuerte Progressbar von: Christian
Geschrieben am: 28.10.2014 12:31:23

Hallo Luschi,

im Vorfeld vielen Dank für deine Ausführliche Erklärung. Ich komme bis zur gelben Makierung, im Überwachungsfenster lässt sich liobj einfach nicht öffnen. Da passiert nichts.

Hängt das vielleicht mit der Endung *.accdb3 zusammen?
Die Daten kommen aus einer Access-Tabelle die über "Daten- Aus Access" hinzugefügt wurde und sich immer beim Start aktualisiert.

Die Flinte werde ich definitiv nicht ins Korn schmeißen, dafür bin ich viel zu heiß auf die Lösung. Das interessiert mich wirklich. Besonders weil diese Art von Ansatz völlig neu ist.


  

Betrifft: AW: Zeitgesteuerte Progressbar von: Luschi
Geschrieben am: 28.10.2014 14:07:18

Hallo Christian,

habe Dir noch mal 3 Bildchen gemacht.
Im 1. wird der Menüpunkt 'Entwurf' gezeigt. Dieser ist nur sichtbar, wenn der Zellcursor sich im Listobjekt befindet und dann muß der Menüpunkt mit der Maus aktiviert werden.
Im 2. zeigt der Pfeil auf den Namen des ListObjektes und im 3. die Stelle im Vba-Code, wo dieser Name eingesetzt werden soll. Zusätzlich ist noch die Position des Haltepunktes dargestellt.
Der Name des Listobjektes wird beim Erstellen der Access-Abfrage bon Excel automatisch vergeben und ist sicher ein anderer als bei mir!






Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: Zeitgesteuerte Progressbar von: christian
Geschrieben am: 29.10.2014 10:09:18

Hallo Luschi,

danke für die schnelle Antwort. Hatte F9 an der falschen Stelle gedrückt.

http://s12.postimg.org/5a3itym0t/Screenshot.png

Hier ist der Screenshot zum aktuellen Stand, also zu einer der vier Tabellen die aktualisiert werden.

Ich bin gespannt wie es weiter geht!

Gruß,

Christian


  

Betrifft: AW: Zeitgesteuerte Progressbar von: Luschi
Geschrieben am: 30.10.2014 10:51:07

Hallo Christian,

hier erst mal das Beispiel noch ohne Progreßbar. Meine Cheffin belegt im gestern & heute mit Sonderaufgaben, da bei uns ja morgen Feiertag ist.
Da finde ich sieher etwas mehr Ruhe, das Beispiel noch zu vervollständigen.
entpacke die zip-Datei in ein leeres Verueichnis und starte auf dem 2. Tabellenblatt das Programm mit Hilfe des Buttons und wühle Dich durch den Vba-Code.

https://www.herber.de/bbs/user/93459.zip

Gruß von Luschi
aus klein-Paris


G




  

Betrifft: AW: Zeitgesteuerte Progressbar von: Christian
Geschrieben am: 30.10.2014 11:02:20

Hallo Luschi,

vielen Dank für deinen weiteren Input. Habe mir die neuen Einträge gerade mal in Ruhe angeguckt, das sieht für mich schon nach High-Level Programming aus :)
Ich versuch mal da durchzukommen und bin auf deine nächste Antwort gespannt.

Gruß,

Christian


  

Betrifft: AW: Zeitgesteuerte Progressbar von: Luschi
Geschrieben am: 31.10.2014 15:57:19

Hallo Christian,

hier man 'ne neue Version mit der ProgressBar. Die jetzt mitgelieferte Access-DB hat über 8.000 Datensätze (DS). Diese DS werden zuerst in ein Speicher-Array geschrieben. Während dieses Vorgangs läuft die ProgressBar mit, aber im ListObjekt sind diese Daten natürlich noch nicht zu sehen.
Erst der doppelte Applikation.Transpose()-Befehl übernimmt diese Aufgabe. Aber das ist ja nur eine 1/10 sek.-Sache. Ansonsten wieder die zip-Datei in ein leeres Verzeichnis...
Schau Dir auch mal die ProgressBar genauer an. Das ist nämlich überhaupt kein Extra-Steuerelement, sondern aus 4 normalen Form-Labels zusammengebaut. Somit benötigt man auch keine Vba-Verweise, ist Excel-versionsunabhängig und funktioniert nach dem selben Prinzip auch in Access, Word...

https://www.herber.de/bbs/user/93479.zip

Gruß von Luschi
aus klein-Paris