Hallo liebe Access Gemeinde,
ich stehe vor einem für mich unlösbaren Problem und bitte Euch um Hilfe.
Ich habe in einem allgemeinen Modul folgende Function:
Function SetFocusCtl(strFrm As String, strCtlNameWithFocus As String, blnFocus As Boolean)
Dim strActiveColor As String: strActiveColor = RGB(255, 0, 0)
Dim strNonActiveColor As String: strNonActiveColor = RGB(0, 0, 0)
Const intActiveWidth As Integer = 1 'Stärke 3
Const intNonActiveWidth As Integer = 1
Dim ctl As Control
Dim frm As Form
Set frm = Forms(strFrm)
For Each ctl In frm.Controls
Select Case ctl.ControlType
Case acTextBox, acComboBox, acListBox, acOptionGroup
If ctl.Name = strCtlNameWithFocus Then
ctl.BorderColor = strActiveColor
ctl.BorderWidth = intActiveWidth
Else
ctl.BorderColor = strNonActiveColor
ctl.BorderWidth = intNonActiveWidth
End If
End Select
Next ctl
End Function
In meinem Hauptformular, welches auch ein Unterformular (1:n) hat, steht im im Ereignis "Form Load" folgender Code:
Private Sub Form_Load()
Dim ctl As Control
Dim strGot As String
Dim strLost As String
For Each ctl In Me.Controls
Select Case ctl.ControlType
Case acTextBox, acComboBox, acListBox, acOptionGroup
With ctl
strGot = "=SetFocusCtl([Form].[Name],[" & ctl.Name & "].[Name], True)"
strLost = "=SetFocusCtl([Form].[Name],[" & ctl.Name & "].[Name], False)"
.OnGotFocus = strGot
.OnLostFocus = strLost
End With
End Select
Next
End Sub
Soweit funktioniert der Code wunderbar. Alle Felder im Hauptformular, welche den Fokus haben, wechseln die Rahmenfarbe auf ROT.
Leider greift der Code nur im Hauptformular, nicht aber im Unterformular.
Wie muss der Code umgebaut werden, damit er generell mit jedem Haupt- und unterformular funktioniert, ist das überhaupt möglich? Danke schon mal für Eure Expertise und lG aus Österreich.
Hallo
die Zuweisung für die Events Got/Lostfocus müssen auch im Form-Load-Event des UF erfolgen.
Die Schnittstelle der SetFocusCtl-Funktion sollte das Form-Objekt übernehmen, nicht den den Namen.
probier mal
Function SetFocusCtl( Frm As form, strCtlNameWithFocus As String, blnFocus As Boolean)
und auskommentieren der Zeilen
Dim frm As Form
Set frm = Forms(strFrm)
Hallo daolix,
danke dass du dich meinem Problem annimmst. Ich habe deinen Tipp umgesetzt, erhalte nun aber folgende Fehlermeldung:
Sie haben als Einstellung der Ereigniseigenschaft den Ausdruck Bei Fokusverlust eingegeben. Dieser Ausdruck hat einen Fehler versursacht: Typenkonflikt.
* Der Ausdruck gibt möglicherweise weder den Namen eines Makros noch den Namen einer benutzerdefinierten Funktion noch [Ereignisprozedur] zurück.
* Beim Auswerten einer Funktion, eines Ereignisses oder eines Makros trat möglicherweise ein Fehler auf.
Hast du diesbezüglich Rat?
Du musst auch den Aufruf anpassen.
strGot = "=SetFocusCtl([Form],[" & ctl.Name & "].[Name], True)"
strLost = "=SetFocusCtl([Form],[" & ctl.Name & "].[Name], False)"
sollte dann nen roten Rahmen malen
Hallo daolix,
ja natürlich hast du Recht. Der Fehler ist mit Änderung des Aufrufs verschwunden.
Die Rahmen werden aber nur im Hauptformular gezeichnet, nicht im Unterformular.
Wenn ich das Unterformular testweise alleine öffne, werden die Rahmen gezeichnet, nicht aber in Kombination mit dem Hauptformular.
Weißt du woran das liegt?
Hallo
da ich nicht sehe wie deine Anpassungen derzeit ausschauen anbei ein Bsp
Ein Sachverhalt, der hier beachtet werden muss, ist dass ein Unterformular nicht selbst in der Forms-Auflistung auftaucht, sondern nur über das UFO-Steuerlement im übergeordneten Hauptform erreichbar ist.
Hallo Ihr zwei,
ich hab mit dem Assistenten das Formular testweise neu erstellt und den Code kopiert. Komischerweise schnurren die Rahmenfarben jetzt wie eine Eins. Ich habe keine Ahnung woran es lag und warum es jetzt funktioniert, aber ich bin happy :) :).
@PhilS: Die Codeänderungen von daolix waren schon korrekt, ich habe nichts daran geändert.
@daolix: Danke für Deine nette und geduldige Unterstützung! :)