2009-05-04 4 views
2

Ich habe mehrere Combo-und Optionsfelder, deren Sichtbarkeit wahr oder falsch ist abhängig von der Benutzerauswahl der anderen übergeordneten Optionsfelder.VBA-Formular-Update nach Werten im Code statt AfterUpdate() eingestellt

Ich verwende die AfterUpdate() Funktion für die übergeordneten Optionsfelder. Diese Methode hat gut funktioniert.

Wenn ich jedoch die Werte der Optionsfelder in VBA-Code (Me.MyOptionBox = 1) festlegen, gibt es keine "Aktualisierung", um die untergeordneten Optionen und Kombinationsfelder anzuzeigen. Es funktioniert, wenn ich manuell auf die Option klicke, aber wenn ich es in den Code einstelle, ändert sich nichts außer der Auswahl des Optionskästchens. Es macht keinen Sinn, das Optionsfeld korrekt anzuzeigen, aber der Code, der für die Überprüfung der ausgewählten Option verantwortlich ist, funktioniert nicht.

Hat jemand irgendwelche Ideen, wie man das umgehen kann? Ich möchte nur das Formular aktualisiert werden, sobald ich die Werte der Optionsfelder festlegen. Was ist das "Update", auf das sich AfterUpdate() überhaupt bezieht?

Ich habe versucht MyForm.Repaint und MyForm.Requery, aber diese funktionieren auch nicht.
Irgendwelche Ideen?

Antwort

1

Sie können die OptionBox_AfterUpdate() -Methode direkt aufrufen, nachdem Sie die Werte festgelegt haben.

+0

Ich habe OptionBox_AfterUpdate versucht, aber ich bekomme einen Syntaxfehler: 'Erwartet: =' –

+0

Ich bin dumm. Ich habe Call OptionBox_AfterUpdate verwendet und es hat perfekt funktioniert. Vielen Dank. –

+1

Die Verwendung von Call bedeutet oft, dass Sie unnötige Klammern haben. In diesem Fall sollte OptionBox_AfterUpdate funktionieren, aber OptionBox_AfterUpdate() benötigt Call – barrowc

1

Ich bin mir ziemlich sicher, dass dies beabsichtigt ist. Das Problem besteht darin, zirkuläre rekursive Aktualisierungen zu vermeiden, wenn Sie bedenken, dass ein Steuerelement von einem Benutzer geändert werden kann, und zwei Arten von Code (explizite und gebundene Daten).

Bei gebundenen Steuerelementen ändern Änderungen an den Daten die Steuerelemente.

Bei Benutzereingaben ändern Änderungen im Steuerelement die Daten und alle Abhängigkeiten, die Sie explizit in Ereignissen angeben.

Für Änderungen, die durch Ihren Code verursacht werden, müssen Sie alle Konsequenzen der Zustandsänderung, die Sie codieren, manuell anwenden.

Wenn Sie gebundene Steuerelemente verwenden, können Sie die Datenquelle ändern und die Konsequenzen automatisch anwenden.

0

Von "Ich verwende die AfterUpdate() -Funktion", meinen Sie, dass Sie einen Ereignishandler für das AfterUpdate-Ereignis hinzugefügt haben, richtig?

Wenn dieser Handler nicht feuert, wenn Sie es erwarten, können Sie Ihren Handler immer direkt anrufen (statt das Ereignis auslösen zu lassen), wo es nötig ist. Aber das wäre wahrscheinlich nicht der beste Weg, dies zu tun; Eher wahrscheinlich gibt es ein anderes Ereignis, das Ihren Handler anstelle von oder zusätzlich zu AfterUpdate aufrufen sollte. Ich erinnere mich nicht an die Namen von Combobox-Ereignissen, aber gibt es nicht etwas wie ItemChanged oder SelectionChanged oder so etwas?

+0

. Von AfterUpdate ich meine, dass ich die Sichtbarkeit für die untergeordneten Felder aktiviert habe, auf AfterUpdate() für jedes Optionsfeld. Mann, der verwirrend ist. –

1

In VBA werden die meisten Steuerungsereignisse nicht ausgelöst, wenn das Steuerelement programmgesteuert und nicht manuell aktualisiert wird. Sie müssen den Code angeben, der nach dem programmatischen Update ausgeführt werden soll.

Verwandte Themen