Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Code greift nur im Hauptformular, nicht aber im Unterformular

Begonnen von Will1974, März 05, 2019, 19:43:53

⏪ vorheriges - nächstes ⏩

Will1974

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.

daolix

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)




Will1974

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?

daolix

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

Will1974

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?

daolix

Hallo
da ich nicht sehe wie deine Anpassungen derzeit ausschauen anbei ein Bsp

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Will1974

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! :)