1.7k Aufrufe
Gefragt in Tabellenkalkulation von
Bearbeitet von halfstone
Hallo Excelprofis

Ich kommen einfach nicht weiter und bin für jede Hilfe dankbar

Folgendes Problem, ich möchte bei das bei geöffneter Userform eine Aktualisierung der TextBox 1 anhand

der laufenden Uhr in aus Textbox 2 stattfindet ohne das dafür die Userform neu gestartet werden muss und ohne dass Tabellenblätter als Datengrundlage benutz werden. Hab schon etliche Foren und Suchfunktion benutzt ohne Erfolg. Das derzeitge Makro funktioniert insofern derzeit nur wenn man die Userfom schließt und erneut öffnet. Zugegebener Maßen beschäftige ich mich erst seit kurzem mit VBA und daher ist viles für mich Neuland.

Gruß

Detlef

Private Sub UserForm_Activate()

  Call Uhrzeit_(True)
 
End Sub

Private Sub Uhrzeit_(booStart As Boolean)

Me.Tag = IIf(booStart, "", "1")
If Me.Tag = "1" Then Exit Sub
Application.OnTime Now + TimeSerial(0, 0, 1), "'GetTime """ & Me.Name & """,""" & TextBox2.Name & """'"

    If Time > TimeValue("06:00:00") And Time < TimeValue("14:00:00") Then
        UserForm1.TextBox1 = "Frühschicht"
    ElseIf Time > TimeValue("14:02:00") And Time < TimeValue("14:08:00") Then
        UserForm1.TextBox1 = "Spätschicht"
    ElseIf Time > TimeValue("14:09:00") And Time < TimeValue("22:00:00") Then
        UserForm1.TextBox1 = "Nachtschicht"
    End If
    
    
End Sub

Private Sub UserForm_Initialize()

TextBox2 = Format(Now, "hh:mm:ss")

End Sub

13 Antworten

0 Punkte
Beantwortet von

Hallo Mr.K

Erst einmal vielen Dank für Deine Mühe die Du Dir machst um mir zu helfen und Sorry wenn ich mich da etwasverwirrend aus gedrückt habe, aber es ist nicht so einfach jemandem die Sache zu erklären, der das gesamte Projekt nicht kennt. Das Du nicht gleich antworten kannst ist kein Problem, bin ja zufrieden das sich überhaupt einer dem Thema angenommen hat. Wie gesagt sind meine VBA Kenntnisse sehr bescheiden und vieles ist durch Hilfe und probieren entstanden.

So jetzt nochmal ein Beschreibungsversuch was genau passieren soll:

Also folgende Annahme, in Spalte J steht untereinander folgende IDs, 1, 15, 1, 15 , 1, 15, 1, somit 4 Einträge ID1 und 3 Einträge ID15. Ausgehend davon das die ersten 2 Einträge der ID1 schon bearbeitet sind, soll jetzt der nächste Eintrag der ID1 gefunden werden und die dazugehörenden Daten aus der gleichen Zeile in den TextBoxen 1, 2, 3 angezeigt werden und dass solange bis ein Benutzer  die TextBoxen über eine Aktion (z.B CommandButton_Click) wieder leert und neu mit den nächsten Daten füllt) Solange keine Aktion ausgeführt wird,müssen die Daten in der TextBox stehen bleiben.  . Ich hoffe soweit verständlichenlightened

Jetzt soll der nächste Eintrag der ID1 in spalte J und die dazugehörenden Daten ermittelt werden. Da die TextBoxen 1,2,3 durch die erste Abfrage noch mit Einträgen befüllt sein können, sollen die Daten dann in TextBox 4,5 und 6 angezeigt werden und ebenfalls solange stehen bleiben bis eine Benutzeraktion ausgeführt wid um die TextBoxen zu leeren und neu zu füllen.

Mit im Wechsel meine ich folgendes sind die TextBoxen 1,2,3 befüllt dann zeige die Daten in TextBox 4,5,6 an

Sind TextBox 4,5,6 belegt dann Zeige die nächsten Daten wieder in TexBox1,2,3 an. Sind alle TextBoxen belegt

dann mache nichts und warte auf Benutzeraktion.

Vieleicht ist es jetzt besser zu verstehenenlightened

Gruß

Detlef

0 Punkte
Beantwortet von

Hallo Mr.K

Erst einmal zur Info für Dich, das Problem mit der Datenanzeige in den TextBoxen ist gelöst und funktioniert soweitsmiley.

Allerdings sind jetzt andere Fragen offen. Es muss ja irgdwie in der Tabelle der Bearbeitungsstatus markiert werden können. Hintergrund ist, wenn die Bestellung erledigt ist, darf diese nicht mehr mit abgefragt werden, da diese ja wieder mit angezeigt werden würde, wenn noch keine weitere Bestellung vorhanden , oder die bestellte Ware nicht da ist.

Ich hatte das mal als Dropdown =WENN(I2 <>"";"offen";"")
die Zellen so formatiert, dass wenn in I2 ein Wert steht, die Zelle L2 automatisch rot gefärbt ist und dort offen steht und danach auf 6000 Spalten nach unten gezogen. Allerdings wird Excel dann sehr langsam weil es beim öffnen alle 6000 Zeilen überprüft. Des Weiteren müsste ja warscheinlich ein Verweis für zB Spalte L erstellt werden, damit man aus der offenen UserForm herraus den Status der entsprechenden Zeile in Spalte L auf erledigt ändern. kann. Man könnte vieleicht auch einne Commandbutton mit einem Makro erstellen, welches die Zeilen in einen anderen sheet verschiebt wenn erledigt. Ich weiss jedoch nicht ob die Zeile wieder bei nächsten öffnen mit auftaucht, da ja die Bestellungen in der AccessdatenBank gespeichert werden.

Hast Du vieleicht ne Idee, ich im Moment jedenfalls nichtenlightened

Gruß

Detlef

0 Punkte
Beantwortet von xlking Experte (1.5k Punkte)

Hi Detlef, 

da bin ich wieder. Schön, dass das mit den Textboxen jetzt klappt, auch wenn ich immer noch nicht weiß, wo das Problem lag. Naiv betrachtet braucht man ja nur im Click-Ereignis des Commandbuttons eine IF-Bedingung die abfragt ob schon die linken Textboxen befüllt sind, dann schreibt man die Daten eben in die rechten. Aber egal. Hauptsache es geht jetzt. smiley

Die erledigten Sachen würde ich gar nicht erst aus der Access-Datenbank nach Excel importieren. Dann hättest du auch das Problem nicht. Wie holst du denn die Daten aus Access? Im einfachsten Fall brauchst du hier nur eine SQL-Abfrage, entweder direkt in Access oder in Excel Power Query, wo du den WHERE-Teil mit angibst. In etwa so: SELECT * FROM AccessTabelle WHERE Status = "" OR Status = "offen". Statt auf die Access-Tabelle beziehst du dich dann beim Import auf diese Abfrage. Wenn du den Status aber mal von erledigt zurück auf Offen ändern willst, musst du das dann aber direkt in der Access-Datenbank machen.

Warum führst du den Workaround eigentlich nicht gleich direkt in Access durch? Wozu der Umweg über Excel? In Access gibts auch VBA-Userforms. Und die Report- und Auswertungsmöglichkeiten sind viel eleganter.

Gruß Mr. K.

...