hoe geef ik enkele variabelen mee in open

Status
Niet open voor verdere reacties.

BartSr

Gebruiker
Lid geworden
26 aug 2008
Berichten
240
In een werkende Access-app had ik voor vaak gevraagde variabelen een public benoemd bijvoorbeeld Public Gadm As String. Nu wil ik dit wijzigen en de variabele vanuit het keuzemenu meegeven in het commando waarmee het form wordt geopend bv in DoCmd.OpenForm "frmFactureren". Maar hoe moet dat?
 
Heel simpel: gebruik geen Public variabelen, maar TempVars. Die kun je te pas en te onpas (dus overal) aanroepen en gebruiken.
Code:
Function DefTempVar()
    TempVars.Add "Gadm", "OctaFish"
End Function

Code:
Sub TestTempvar()
    DefTempVar
    MsgBox TempVars!Gadm.Value
End Sub[code]

De laatste procedure is uiteraard om te testen; de Functie kun je ofwel op een startformulier laten draaien, of in een AutoExec macro.
 
Ik begrijp de strekking maar de uitwerking niet.
Als ik vanuit het ene form tekst1 en tekst2(3,4) naar het andere wilt sturen wat komt er dan in het verzendende form en wat in het ontvangende form
 
Ik denk dat je de vraag niet goed hebt gesteld, want wat je nú zegt, is dat je een veldwaarde wilt gebruiken. Dat is niet hetzelfde als een Public Variabele. Overigens kun je wat je wilt ook prima vanuit het formulier met een TempVar doen, maar de oplossing is veel simpeler. Ik gebruik namelijk altijd de OpenArg parameter als ik informatie van een geopend formulier wil doorgeven aan een volgend formulier.
Bij het openen vanuit DoCmd.OpenForm is het laatste argument de OpenArgs variabele, en die kun je dus vullen met de waarde van de keuzelijst. Bij het tweede formulier lees je de waarde van de OpenArgs variabele uit en verwerk je de inhoud.

OpenArgs heeft wel een beperking: je kunt maar één string meegeven. En dat is lastig als je de waarden van twee of drie variabelen tegelijk wil doorzetten. Maar daar is met een simpel trucje wel wat aan te doen: gebruik een scheidingsteken om de velden te scheiden, bijvoorbeeld de Pipeline (|). In het ontvangende formulier gebruik je dan het Split commando om de waarden te scheiden in een matrix variabele, en die kun je dan weer toewijzen aan de gewenste velden.
 
ik begrijp het vorige, waarvoor mijn dank.
Als ik vanuit het ene form tekst1 en tekst2(3,4) naar het andere wilt sturen wat komt er dan in het verzendende form en wat in het ontvangende form
Kun je hier ook antwoord op geven?
 
Ik heb hier een voorbeeldje van een formulier waarop een keuzelijst staat waarin een persoon wordt gekozen. Die keuzelijst gebruikt als waarde een ID, en je kiest op naam. Vrij gangbare constructie :). Als de persoon in die keuzelijst niet bestaat, omdat je een niet-bestaande naam invoert, wordt de gebeurtenis NotInList (Bij niet in lijst) getriggered. Die opent een Persoonsformulier waarop je de persoonsgegevens invoert, en als je daarmee klaar bent keer je terug op het oorspronkelijke formulier waar de nieuwe persoon dan gebruikt kan worden. Dat ziet er qua code zo uit:

Code:
Private Sub comKlant_NotInList(NewData As String, Response As Integer)
    If MsgBox("Deze persoon staat niet in de lijst. Zullen we hem toevoegen?", vbOKCancel) = vbOK Then
        DoCmd.OpenForm "fKlant", DataMode:=acFormAdd, WindowMode:=acDialog, OpenArgs:=NewData
        Response = acDataErrAdded
        Me.comKlant.Value = DLookup("PatientID", "tPatienten", "Naam = """ & NewData & """")
    Else
        Response = acDataErrContinue
        Me.comKlant.Undo
    End If
End Sub

En op het tweede formulier:
Code:
Private Sub Form_Open(Cancel As Integer)
    If Me.OpenArgs <> "" Then
        With Me.Naam
            .SetFocus
            .Text = Me.OpenArgs
        End With
    End If
End Sub
Dit is dus een voorbeeld met één parameter.
 
En hier een variant met meerdere parameters en het | teken als scheidingsteken. Mag uiteraard ook een andere zijn.

Code:
Private Sub cmdKlanten_Click()
Dim sArgs As String
    sArgs = Me.Klantnaam.Value & "|" & Me.Datum_meeting.Value & "|" & Me.AantalPersonen.Value
    DoCmd.OpenForm "fKlanten", DataMode:=acFormAdd, WindowMode:=acDialog, OpenArgs:=sArgs
End Sub

En op het tweede formulier wordt de OpenArgs weer gesplitst:
Code:
Private Sub Form_Open(Cancel As Integer)
Dim arr As Variant
    If Me.OpenArgs <> "" Then
        arr = Split(Me.OpenArgs, "|")
        If LBound(arr) = UBound(arr) Then
            With Me.Veld1
                .SetFocus
                .Text = Me.OpenArgs
            End With
        Else
            For i = LBound(arr) To UBound(arr)
                Me("Veld" & i + 1).Value = arr(i)
            Next i
        End If
    End If
 End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan