procedure aanroepen in formulier

Status
Niet open voor verdere reacties.

jbusser

Gebruiker
Lid geworden
23 feb 2007
Berichten
147
Ik hoop dat ik kan uitleggen wat ik bedoel.

Ik heb een procedure die in verschillende formulieren gebruikt worden.
Echter, wanneer ik een procedure aanroep waarin een veld in het formulier moet worden gevuld geeft de procedure dat het betreffende veld niet gevonden kan worden.
Hoe kan ik het voor elkaar krijgen dat een procedure het veld van het op dat moment geopend formulier vult?
Het betreft namelijk formulieren met dezelfde data maar met een andere lay-out (lees: veld-volgorde)
Dit heeft te maken met roosters die door verschillende leveranciers met verschillende lay-outs worden meegeleverd.

Dus:
Formulier test1 heeft veldenvolgorde veld1, veld2, veld3, veld4, veld5
Formulier test2 heeft veldenvolgorde veld2, veld3, veld1, veld5, veld4

De procedure vult de velden:
Code:
if [code1] = "3" then 
     veld1 = "+"
   else
     veld1 = "-"
end if

if [code2] = "3" then 
     veld2 = "+"
   else
     veld2 = "-"
end if

et cetera
Hoe kan ik de procedure in beide formulieren aanroepen en laten werken?
 
Laatst bewerkt:
Waar wordt de code vandaan gehaald?
Bij veld1 moet wel gespecificeerd worden me.veld1 of Forms!frm_naam!veld1
Is “3” een numeriek of een alfa numeriek veld?
 
Begin eens met je volledige procedure te posten, want hier kan ik geen chocola van maken. Sowieso speelt de volgorde van de velden geen enkele rol; als een veld bestaat met een bepaalde naam, wordt hij gevuld. Punt. Ánders wordt het als het veld op het formulier een andere naam heeft. Dan kan je wél een probleem hebben.

Procedures die op meerdere formulieren moeten draaien werken het beste als je de velden die ingevuld moeten worden meegeeft als parameter. Samen met de naam van het formulier. Dan kan het eigenlijk al niet fout gaan. Dus: post eerst de code, dan kijken we verder.
 
Zonder verdere context en op basis van de genoemde veldnamen (die vast anders zullen zijn), zou ik zeggen: maak een procedure als:
Code:
Sub PlusMinus(Form As String, Code As String)    
    Dim Formulier As Form
    Dim i As Integer


    Set Formulier = Forms(Form)


    For i = 0 To Formulier.Count - 1
        If Formulier(i).ControlName Like "Veld*" Then
            If Code = "3" Then
                Formulier(i).Value = "+"
            Else
                Formulier(i).Value = "-"
            End If
        End If
    Next i


    Set Formulier = Nothing
End Sub

Roep die procedure dan bij openen (of bij aanwijzen?) van de formulieren als volgt aan:
Code:
    Call PlusMinus(Me.Name, Me.Code)
 
Laatst bewerkt:
Xps leeft nog in een wat ouder via tijdperk, want het principe kan een stuk handiger en korter.

Code:
Sub PlusMinus(frm As Form, Code As String)

en:
Code:
[FONT=Verdana]PlusMinus(Me, Me.Code.Value)[/FONT]

voor de aanroep. Call is al jaren niet meer nodig.

maar het idee is wel ongeveer wat ik bedoel. Eventueel laat je de functie een Boolean als output genereren zodat je op fouten kunt checken. Krijg je zoiets:

Code:
Function PlusMinus(frm As Form, Code As String) As Boolean
     On Error Goto Hell
      ‘Je code
     PlusMinus = True
     Exit Function

Hell:
     PlusMinus = False
End Function

En voor de uitvoer:
Code:
If [FONT=Verdana]PlusMinus(Me, Me.Code.Value) = False Then Exit Sub[/FONT]

’t Is dummy code uiteraard, zo vast niet bruikbaar.
 
Excuses voor mij late reactie, wegens ziekte even uit de running geweest...
Wanneer ik een veld in een formulier wil vullen met een waarde vanuit een ander formulier doe ik dat meestal zo (niet beter wetend)
[Forms]![Formuliernaam]![Veld]=veldwaarde

Wanneer ik vanuit een formulier de procedure aanroep kan ik de variabele "Frm" de naam van het formulier meegeven dat de procedure aanroept
Maar...

Hoe kan ik dan bij [Forms]![Formuliernaam]![Veld]=veldwaarde de formuliernaam de waarde van Frm meegeven?
Ik heb al een aantal dingen geprobeerd maar [Forms]![Frm]![Veld]=veldwaarde, bijvoorbeeld, werkt niet (kan formulier Frm niet vinden).
 
@jbusser

Begrijp niet precies wat u wilt, maar bekijk deze 2 screenprints.

2022-12-18.png

2022-12-18 (1).png

Is dit ongeveer de bedoeling?


Groetjes,
 
Nou, nee, denk k.
Zie de vorige posts in dit topic; ik heb een zeer uitgebreide procedure die op op verschillende formulieren van toepassing is.
Wanneer ik vanaf één van die formulieren de procedure aanroep kan ik de naam van betreffend formulier meegeven aan een variabele (in dit geval Frm)
Maar hoe krijg ik dan de, door de procedure berekende, velden in formulier [Frm] gevuld (het formulier is het probleem, de velden niet!)
 
Volgens mij heb ik in post #4 laten zien hoe je een formuliernaam onafhankelijke procedure zou kunnen maken.
Anders misschien maar eens een voorbeeld van je database posten. Het is allemaal wel erg abstract zo.
 
En ik heb die code verbeterd, dus die variant zou ik toch eerder oppakken :). Maar als je er zelf niet uit komt, dan helpt een voorbeeldje uiteraard enorm. Ik sta niet te popelen om een eigen voorbeeldje te maken (kost tijd) wat dan niet aansluit bij jouw werkwijze. Een beetje moeite van jouw kant misstaat dus niet.
 
jbusser,

Ondanks onze vraag om zelf een voorbeeld database hier neer te zetten, doe ik een laatste poging.

Zie screenprint: 2022-12-19 (1).png

Groetjes,
 

Bijlagen

  • 2022-12-19.png
    2022-12-19.png
    140,5 KB · Weergaven: 17
Laatst bewerkt:
Wederom excuses
(Door familieomstandigheden even uit de running geweest...)
Bedankt voor jullie hulp.
Ik had het script van Peter niet aandachtig genoeg gelezen maar ben er nu uit en...
Was best eenvoudig.

Gebruik het nu zo:
Code:
Sub TabelVullen(Form As String)    
    Dim Formulier As Form


    Set Formulier = Forms(Form)

        If Formulier.[Score_AA] = "3" then
             Formulier.[Waarde_AA] = "+"
             Else
             Formulier.[Waarde_AA] = "1"
        End If

        If Formulier.[Score_AB] = "3" then
             Formulier.[Waarde_AB] = "+"
             Else
             Formulier.[Waarde_AB] = "1"
        End If

' .... en zo worden alle velden bekeken

    Set Formulier = Nothing
End Sub

Geactiveerd met:

Code:
TabelVullen (Me.Name)

Met andere woorden:
Hartelijk bedankt: Opgelost!
 
En nu de handel nog slim (gebruik het formulier i.p.v. de naam) en compact programmeren:

Code:
TabelVullen (Me)

Code:
Sub TabelVullen(frm As Form)
    With frm
        If .Score_AA = 3 Then .Waarde_AA = "+" Else: .Waarde_AA = "1"
        If .Score_AB = "3" Then .Waarde_AB = "+" Else: .Waarde_AB = "1"
    End With
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan