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

Formularfelder in Schleife bearbeiten

Formularfelder in Schleife bearbeiten
04.04.2023 14:45:31
Frank

Hallo zusammen,

ich habe in einem Excel-Formular mehrere Eingabefelder für Morgens, Mittags und Abends.
Nun möchte ich die Felder für Morgens Locked setzen und transparent setzen.
Da ich mit Formularen noch nicht so oft gearbeitet habe, habe ich das zunächst an einem Feld getestet.
Und das funktioniert auch.

Doch nun habe ich mir überlegt das mit einer Schleife für alle die zu "Morgens" gehören (Tabindex 1 bis 7 ) zu machen.
Kann ich hierbei den Tabindex verwenden?
Alternativ hatte ich gedacht alle entsprechenden Felder als Gruppe zu bearbeiten. Hat die Gruppe einen Namen? Und wie finde ich den Namen der Gruppe heraus?

        
If CDate(LastTime) > "11:00:00" Then
            Me.Uhr_Morgens.Locked = True
            Me.Uhr_Morgens.BackStyle = 0 'fmBackStyleTransparent
End If


10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formularfelder in Schleife bearbeiten
04.04.2023 14:59:38
Daniel
Hi

Wenn alle betroffenen Felder im Namen einen bestimmten Text enthalten ("Morgens"), kannst du eine Schleife über alle Elemente der Form machen und dir die betroffenen rauspicken:
das wäre jetzt die einfachste und übersichtlichste Art der Gruppenbildung.

dim crt as Control
for each crt in Me.Controls
    if crt.Name like "*Morgens" Then
        crt.Locked = True
        crt.BackStyle = 0
    end if
Next
Gruß Daniel


AW: Formularfelder in Schleife bearbeiten
04.04.2023 15:18:09
Frank
perfekt .. vielen Dank


AW: Formularfelder in Schleife bearbeiten
04.04.2023 16:22:19
Frank
Hallo Daniel,

das funktionirt so weit gut.
Doch, als ich einen Fokus setzen wollte, habe ich nun feststellen müssen das diese Schleife mehrfach durchlaufen wird.
Den ich habe den Code in eine Funktion gepackt.
Und die übergeordnente Prozedur wird beim Verlassen ausgeführt.

Deshalb wäre es vermutlich doch nötig das ich nur die Felder schließe die betroffen sind.


Private Sub Datum_Exit(ByVal Cancel As MSForms.ReturnBoolean)

    If Not IsEmpty(Me.Datum.Value) And Me.Datum.Value > "" Then
    If CDate(LastDate) = CDate(Me.Datum.Value) Then
        rEing = rEnd
        If CDate(LastTime) >= CDate("11:00:00") Then
            LockCells ("*Morgens*")
        End If
        If CDate(LastTime) >= CDate("14:00:00") Then
            LockCells ("*Mittags*")
        End If
    Else
        rEing = rEnd + 1
    End If
End If

UserForm_Eingabe.Uhr_Abends.SetFocus

End Sub

Function LockCells(TagZeit)
Dim crt As Control

For Each crt In Me.Controls
    If crt.Name Like TagZeit Then
        crt.Locked = True
        crt.BackStyle = 0
    End If
Next
Debug.Print "LockCells"

End Function


Anzeige
AW: Formularfelder in Schleife bearbeiten
04.04.2023 18:04:09
Frank
Kann es sein das der durchlauf der Schleife mehr als 2 mal durchlaufen wird, weil es das SetFokus gibt?
Denn ohne SetFokus wird die schleife 2 mal durchlaufen.
Mit SetFokus häufiger... ich glaube es war 4 mal

Darüber hinaus Wird nicht die richtge Textbox aktiviert.
Bsp. Uhr_Morgens hat den TabIndex 1
Sys_Morgens_2 hat den TabIndex 2
Uhr_Abends hat den TabIndex 15

am ende von Sub Datum_Exit steh der Fokus auf Sys_Morgens_2 und nicht wie gewünscht auf Uhr_Abends
Wieso?


AW: Formularfelder in Schleife bearbeiten
04.04.2023 18:35:14
Daniel
ohne Beispieldatei schwer zu sagen.
In Eventmakros Aktionen ausführen, die diese Events triggern ist immer problematisch und kann zu seltsamen zuständen führen. man müsste dann auch prüfen, wann genau das Eventmakro ausgeführt wird.
ich würde sowas weglassen.
Ist denn wichtig, dass nach der Eingabe in Datum der Focus auf Uhr_Abends steht?
wenn das der Fall ist, sollte Uhr_Abends den TabIndex von Datum + 1 haben, so dass der Focus nach TAB oder ENTER automatisch auf Uhr_Abends geht.

noch eine Unstimmigkeit:
du verwendest CDate(Me.Datum.Value). daher solltest du vorher prüfen, ob Datum.Value auch ein Datum als Eingabe enthält, also besser: If IsDate(Datum.Value) Then. Das schließt die Prüfung auf leere Textbox mit ein.

und generell: "Schleifen" sind im VBA "For-Next", "DO-Loop" oder "While-Wend"
nichts von dem kommt in deinem Code vor. Was genau verstehst du unter "Schleife"?

Gruß Daniel


Anzeige
AW: Formularfelder in Schleife bearbeiten
04.04.2023 19:34:59
Frank
naja... ich habe den SetFokus aus bequemlichkeit setzen wollen.
Damit der Coursor gleich dort steht wo als nächstes eingetragen werden soll.
Grundsätzlich habe ich alle TabIndex extra in der Reihenfolge geändert in der die Eingabe logischeweise erfolgt.
So ist der Gedanke gekommen, das der Coursor im ersten nicht gelockten Feld steht.

Zur Schleife... Recht hast Du ist ne If-Anweisung.
Danke für die Idee mit isDate


AW: Formularfelder in Schleife bearbeiten
04.04.2023 19:41:42
Frank
zum Event Datum_Exit die Idee war nach dem verlassen des Felds zu prüfen ob das Datum gleich dem Datum des Letzen Datum in einer Tabelle ist. (das oben im Formular zur Info angezeigt wird)


Anzeige
AW: Formularfelder in Schleife bearbeiten
04.04.2023 19:52:37
Daniel
Solche Angaben ohne Datei mit minimalen Informationen darüber, was überhaupt passieren soll, ist sehr schwierig.
Kannst du mal die Datei hochladen und beschreiben, was wie ablaufen soll?

Hast du schon mal in dem Makro einen Haltepunkt gesetzt und bist im Einzelstep durchgelaufen? dann müsstest du ja sehen, was wo getriggert wird.


AW: Formularfelder in Schleife bearbeiten
05.04.2023 14:21:41
Frank
Im Anhang die Datei.
Ich habe gedacht wenn ich die Funktion zur Abschaltung der Zellen (der Code von Daniel) auskommentiere und nur noch das SetFokus in der If-Anweisung (Sub Datum_Exit) verwende. Das dann das setzen des Fokus auch ohne ändern der TabIndex funktioniert.
Die TabIndex ändern möchte ich nicht, da sonst die Reihenfolge insgesammt nicht mehr passt.
Ich habe in den Einzelschritten nicht entdeckt warum das setzen des Fokus nicht klappt.

https://www.herber.de/bbs/user/158604.xlsm
Wenn das Formular-Feld Datum verlassen wird, soll der Fokus entsperchend der if-Anweisung gesetzt werden.
Optimal wäre wenn die Formular-Felder auch deaktiviert werden würden. (doch das habe ich vorerst auskommentiert)


Anzeige
AW: Formularfelder in Schleife bearbeiten
05.04.2023 15:08:37
Daniel
Hi
das Problem ist hier das zusammenspiel der Events und Eventmakros.
wenn du im EXIT-Event ein Setfocus ausführst, dann wird das EXIT-Event nochmal aufgerufen, warscheinlich weil bei EXIT die Textbox immer noch den Focus hat somit über das SetFocus nochmal verlassen wird.
Probier mal, ob es besser funktioniert, wenn du statt EXIT das AFTERUPDATE-Event verwendest.
ich weiß jetzt auch nicht genau, was der unterschied zwischen beiden ist, aber wenn du im AfterUpdate ein SetFocus ausführst, gibt es keinen wiederholten Aufruf.
Es könnte daran liegen, dass AfterUpdate nur in Verbindung mit einer Wertänderung ausgeführt wird, klick man in die Textbox und verlässt diese ohne eine Änderung des Inhalts, wird zwar Exit ausgeführt, aber kein AfterUpdate.

Gruß Daniel

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige