"padnaam" van een subformulier of veld...

Status
Niet open voor verdere reacties.

ernstcramer

Gebruiker
Lid geworden
14 dec 2015
Berichten
66
Je kan een veld vinden/vullen met behulp van het commando Me![LED] = 0
Een heel subformulier kan ik bijvoorbeeld (afhankelijk van een waarde) zichtbaar maken of niet: Me.sF_functietoets.Visible = False

Breng ik het formulier, waar dit subformulier is zit, weer onder in een ander formulier, moet ik de padnaam uitbreiden.
Voorbeeld: [Forms]![MF_MCB]![hF_data]![sF_tab0]![afbPreview].Picture = hulpPrev; waarbij het plaatje afbPreview geladen wordt met een vooraf gedefinieerde waarde hulpPrev

Nou vraag ik mij af of dat "geneste gedeelte" (dus [Forms]![MF_MCB]![hF_data]![sF_tab0] wat nodig is in de plaats van Me!) ook automatisch kan. Want nu kan ik het formulier sF_tab0 niet apart testen, omdat de geneste situatie niet herkent wordt.
 
Automatisch? Nee. Je zult de naamverwijzing ergens moeten neerzetten. Lijkt mij een kwestie van één keer intypen, dus wat is het probleem?
 
Ok, helder, was ik al bang voor.

De andere optie heb ik geprobeerd, maar dat levert een foutmelding op; dus ergens doe ik iets niet goed.

Code:
Option Compare Database
Public prefixPad As String

Private Sub decoder_Enter()
prefixPad = "[Forms]![MF_MCB]![hF_data]![sF_Tab1]"
    If Me(prefixPad)![decoder] = 1 Then 'test de inhoud van veld decoder
        Me(prefixPad).[adres].Visible = False 'maakt de velden zichtbaar 
        Me(prefixPad).[adres] = "0"
        Me(prefixPad).[HVM].Visible = False
        Me(prefixPad).[HVM] = 0
        Me(prefixPad).[geluid].Visible = False
        Me(prefixPad).[geluid] = 0
        Me(prefixPad).[LED].Visible = False
        Me(prefixPad).[LED] = 0
        Me.sF_functietoets.Visible = False
    Else
        Me(prefixPad).[adres].Visible = True
        Me(prefixPad).[HVM].Visible = True
        Me(prefixPad).[geluid].Visible = True
        Me(prefixPad).[LED].Visible = True
        Me(prefixPad).sF_functietoets.Visible = True
    End If
End Sub

De foutmelding is deze:
foutmelding_Access.JPG
 
Dit: ( prefixPad = "[Forms]![MF_MCB]![hF_data]![sF_Tab1]") gaat natuurlijk nooit werken; Forms! is een collectie waar je uit put, geen string. En het is zo simpel: wijs het formulier toe aan een variabele, en je hebt nog IntelliSense ook!
Code:
Dim frm As Form
    Set frm = Forms![MF_MCB]![hF_data]![sF_Tab1].Form
    With frm
        If .decoder = 1 Then
        etc.
 
...en je hebt nog IntelliSense ook!
:P

...maar waar zet ik die code nu neer?
Ik was voor "intelligentie" op sF_tab0 begonnen met code in dat formulier. Maar toen ik het een sub maakte op hF_data, moest ik die code verhuizen. En weer toen ik hF_Data onderbracht in mijn hoofdformulier...

Dus is het "Dim frm..." in je voorbeeld of "Public frm..."; zodat het in elk formulier werkt?
 
Die Public declaratie snapte ik ook al niet. Volgens mij heb je die niet nodig. Mijn (redelijk dummy) code zet je gewoon onder de knop. De Decoder code dus. Waarom je de Enter gebeurtenis gebruikt, ook daar zal je je reden voor hebben :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan