Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Aktualisierung userform

Aktualisierung userform
26.03.2009 15:02:55
Marco
Hallo zusammen,
ich habe eine Applikation geschrieben, welche ausschließlich über Userforms mit dem Anwender kommuniziert. Hierbei erfolgt ein Zugriff auf eine Datenbank. Es wird eine Tabelle ausgelesen die in einer Liste dargestellt wird. Zum Einlesen dieser Liste habe ich auch eine Funktion definiert.
Doch kommen wir zu den Problem. Diese Funktion wird momentan nur ausgeführt wenn auf einen Aktualisieren Button geklickt wird. Es soll aber z.B. jede Minute einmal automatisch aktualisiert werden. Und das während die Maske geöffnet ist. Gibt es hierfür eine Möglichkeit. Ist sicher nicht ganz einfach!
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aktualisierung userform
26.03.2009 15:25:34
Hajo_Zi
Hallo Marco,
benutze OnTime
Auf meiner HP sind einige Beispiele zu blinkenden Zellen da wird es benutzt.

AW: Aktualisierung userform
26.03.2009 16:04:06
fcs
Hallo Hajo,
ist OnTime in Verbindung mit dem Userform funktionsfähig?
Ein OnTime-Makro kann doch erst wieder ausgeführt werden, wenn andere makros also auch ein Userform wieder abgeschlossen ist.
Ich denke mit der Auswertung der Mausbewegung im UF kommt man besser klar.
Gruß
Franz
Anzeige
AW: Aktualisierung userform
26.03.2009 16:06:22
Marco
Danke für das Statement! Werde erstmal das mit der Mausbewegung testen!! Wenn das läuft bin ich ja glücklich! Gebe morgen früh direkt Bescheid!
Gruß
AW: Aktualisierung userform
26.03.2009 17:07:37
Hajo_Zi
Hallo Franz,
ich habe es nicht getestet, aber was spricht dagegen OnTime vor der Userform zu starten?
Gruß Hajo
Anzeige
AW: Aktualisierung userform
26.03.2009 17:55:41
fcs
Hallo Hajo,
ich hab es jetzt auch nochmals mit OnTime probiert. Es geht auch.
Generelles Problem bei einer wie auch immer zeit-gesteuerten Listbox-Aktualisierung ist, dass die Listenaktualisierung mitten in eine andere Aktion fallen kann, was natürlich recht nervig sein kann.
Gruß
Franz

Beispiel-Code in einem allgemeinen Modul
Public Time_Update As Date
Sub aaa_UF()
On Error Resume Next
Call Fill_Listbox
UserForm1.Show
Application.OnTime earliesttime:=Time_Update, procedure:="Fill_Listbox", schedule:=False
End Sub
Sub Fill_Listbox()
Dim wks As Worksheet, lngZ As Long
Set wks = Worksheets("Data")
With UserForm1.ListBox1
.Clear
For lngZ = 2 To wks.Cells(wks.Rows.Count, 1).End(xlUp).Row
.AddItem wks.Cells(lngZ, 1).Text
.List(.ListCount - 1, 1) = wks.Cells(lngZ, 2).Text
Next
End With
MsgBox "Listbox ist aktualisert"
Time_Update = Now + TimeSerial(0, 0, 59)
Application.OnTime earliesttime:=Time_Update, procedure:="Fill_Listbox"
End Sub


Anzeige
AW: Aktualisierung userform
27.03.2009 10:34:38
Marco
Hallo!
Es funktioniert sehr gut mit ontime!
Habe folgende Zeilen in meine Einlesefunktion geschrieben:
Time_Update = now + TimeSerial(0, 5, 0)
Application.OnTime earliesttime:=Time_Update, procedure:="project_fit_list_import"
und jetzt funktioniert es.
Danke für die Hilfe, besonders für die fast fertigen codes vom Franz!! So richtig verstanden wie es funktioniert habe ich zwar nicht, aber das Ziel ist das Ziel! ;)
Anzeige
AW: Aktualisierung userform
17.04.2009 10:48:07
Marco
Hallo,
hat funktioniert mit Ontime! Irgendwie klappt das mit den 5 Minuten, die er eigentlich warten sollte nicht immer, aber das ist halb so schlimm!
Danke euch!!
AW: Aktualisierung userform
26.03.2009 16:00:57
fcs
Halo marco,
mit folgender Prozeduren im Userform funktioniert es im Prinzip.
Dabei werden Mausbewegungen im UF überwacht und die Zeitdifferenz zur letzten Ausführung der Listenaktualisierung.
Gruß
Franz

Private TimeLB As Date
Private Sub CommandButton1_Click()
'Schließen Button
Unload Me
End Sub
Private Sub CommandButton2_Click()
'Aktualisieren Button
Call Fill_Listbox
End Sub
Private Sub UserForm_Initialize()
'UF-Initialisierung
Call Fill_Listbox
End Sub
Sub Fill_Listbox()
Dim wks As Worksheet, lngZ As Long
Set wks = Worksheets("Data")
With ListBox1
.Clear
For lngZ = 2 To wks.Cells(wks.Rows.Count, 1).End(xlUp).Row
.AddItem wks.Cells(lngZ, 1).Text
.List(.ListCount - 1, 1) = wks.Cells(lngZ, 2).Text
Next
End With
MsgBox "Listbox ist aktualisert"
TimeLB = Now
End Sub
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, _
ByVal X As Single, ByVal Y As Single)
If Now - TimeLB > TimeSerial(0, 1, 0) Then Call Fill_Listbox
End Sub


Anzeige
AW: Aktualisierung userform
26.03.2009 16:03:39
Marco
Klingt interessant und vielversprechend. Ich werde es morgen direkt ausprobieren und dann Rückmeldung geben!!
Gruß Marco
;
Anzeige
Anzeige

Infobox / Tutorial

Userform in Excel VBA automatisch aktualisieren


Schritt-für-Schritt-Anleitung

  1. Vorbereitung:

    • Stelle sicher, dass Du eine Excel-Arbeitsmappe mit einem Userform hast. Öffne den VBA-Editor (Alt + F11).
  2. Userform erstellen:

    • Erstelle ein neues Userform und füge eine Listbox und zwei Buttons (z.B. "Aktualisieren" und "Schließen") hinzu.
  3. VBA-Code einfügen:

    • Füge den folgenden Code in ein allgemeines Modul ein:
    Public Time_Update As Date
    
    Sub aaa_UF()
       On Error Resume Next
       Call Fill_Listbox
       UserForm1.Show
       Application.OnTime earliesttime:=Time_Update, procedure:="Fill_Listbox", schedule:=False
    End Sub
    
    Sub Fill_Listbox()
       Dim wks As Worksheet, lngZ As Long
       Set wks = Worksheets("Data")
       With UserForm1.ListBox1
           .Clear
           For lngZ = 2 To wks.Cells(wks.Rows.Count, 1).End(xlUp).Row
               .AddItem wks.Cells(lngZ, 1).Text
               .List(.ListCount - 1, 1) = wks.Cells(lngZ, 2).Text
           Next
       End With
       MsgBox "Listbox ist aktualisiert"
       Time_Update = Now + TimeSerial(0, 0, 59) ' Aktualisierung alle 59 Sekunden
       Application.OnTime earliesttime:=Time_Update, procedure:="Fill_Listbox"
    End Sub
  4. Mausbewegung überwachen:

    • Um die Listbox bei Mausbewegungen zu aktualisieren, füge den folgenden Code in das Userform ein:
    Private TimeLB As Date
    
    Private Sub UserForm_Initialize()
       Call Fill_Listbox
    End Sub
    
    Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, _
                                   ByVal X As Single, ByVal Y As Single)
       If Now - TimeLB > TimeSerial(0, 1, 0) Then Call Fill_Listbox
    End Sub
    
    Sub Fill_Listbox()
       Dim wks As Worksheet, lngZ As Long
       Set wks = Worksheets("Data")
       With ListBox1
           .Clear
           For lngZ = 2 To wks.Cells(wks.Rows.Count, 1).End(xlUp).Row
               .AddItem wks.Cells(lngZ, 1).Text
               .List(.ListCount - 1, 1) = wks.Cells(lngZ, 2).Text
           Next
       End With
       MsgBox "Listbox ist aktualisiert"
       TimeLB = Now
    End Sub
  5. Testen:

    • Starte das Userform, um die automatische Aktualisierung zu überprüfen.

Häufige Fehler und Lösungen

  • Fehler: Listbox wird nicht aktualisiert:

    • Stelle sicher, dass die Funktion Fill_Listbox korrekt aufgerufen wird. Überprüfe auch, dass die UserForm_Initialize-Prozedur funktioniert.
  • Fehler: Anwendung stürzt ab:

    • Achte darauf, dass keine Konflikte mit anderen Makros bestehen, die möglicherweise gleichzeitig laufen.

Alternative Methoden

  • Verwendung von Timer:

    • Du kannst auch mit API-Call-Timern arbeiten, um eine präzisere Kontrolle über die Aktualisierung zu erhalten.
  • Manuelle Aktualisierung:

    • Wenn Du die automatische Aktualisierung nicht benötigst, kannst Du die Funktion Fill_Listbox einfach durch Klick auf den "Aktualisieren"-Button manuell ausführen.

Praktische Beispiele

  • Beispiel 1:

    • Ein einfaches Userform, das jede Minute eine Liste von Benutzerdaten anzeigt und aktualisiert:
    Time_Update = Now + TimeSerial(0, 1, 0) ' Aktualisierung nach 1 Minute
  • Beispiel 2:

    • Userform mit dynamischen Daten, die bei Mausbewegung aktualisiert werden, um sicherzustellen, dass die Daten stets aktuell sind.

Tipps für Profis

  • Nutze die Application.OnTime-Methode gezielt, um Ressourcen zu sparen, indem Du die Aktualisierung nur dann auslöst, wenn es nötig ist.
  • Halte Deine Userforms übersichtlich und vermeide übermäßige Aktualisierungen, die die Benutzererfahrung beeinträchtigen könnten.

FAQ: Häufige Fragen

1. Wie kann ich die Aktualisierungszeit anpassen?
Du kannst die Zeit in der TimeSerial-Funktion ändern, um die Aktualisierungsintervalle nach Deinen Bedürfnissen zu gestalten.

2. Funktioniert das in allen Excel-Versionen?
Ja, die vorgestellten Methoden funktionieren in den meisten modernen Versionen von Excel, die VBA unterstützen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige