data van formulier1 naar formulier 2

Status
Niet open voor verdere reacties.

klaaspeter

Gebruiker
Lid geworden
20 nov 2010
Berichten
377
Beste,

Ik wil graag het volgende maar krijg het niet voor elkaar.

Ik heb namelijk 2 formulieren.

Formulier 1 bestaat uit de gegevens van een training. Hierbij worden verschillende velden gevuld waaronder Id.

In formulier 2 worden de acties die voor een trainingen moeten worden voldaan opgeroepen dit moet dan weer gekoppeld worden aan het Id nummer van de training.

Nu wil ik dus graag, dat ik het Id nummer van formulier 1 naar formulier 2 gaat. en automatisch wordt ingevuld.

In formulier 2 heb ik Idtraining dit moet het zelfden worden als Id bij formulier 1.

Hoop dat het zo een beetje duidelijk is.

Alvast bedankt!
 
Da's een stuk duidelijker :D
En de oplossing is ook vrij simpel: geef bij het openen van het tweede formulier het TrainingID mee als OpenArgs variabele. Dat is een speciaal soort argument, dat elk formulier kan uitlezen. Bjj het openen van het tweede formulier lees je de OpenArgs variabele weer uit, en doe je ermee wat je verder wilt doen; bijvoorbeeld het formulier filteren, of een waarde laten invullen.
Overigens is deze techniek helemaal niet nodig als je het tweede formulier opneemt als subformulier in het eerste; dan kun je ze aan elkaar koppelen op basis van TrainingID en hoeft er helemaal niks geprogrammeerd te worden. Heb je daar al naar gekeken?
 
Hehe kan het wel :)

Maar goed, ik heb inderdaad gegeken naar een subformulier alleen werkt dit niet naar mijn wens (kan ook aan mijn liggen natuurlijk)

Ik heb namelijk een actielijst die bij elke training terug moet komen. Maar als ik het als subformulier gebruik krijg ik geen record te zien.

Maar het mee sturen van OpenArgs doe dat dan zo:?

Code:
DoCmd.OpenForm trainingen, , , , , , Id

en verwerk ik dan de Id naar Idtraining?
 
Als je niks op het subformulier ziet, is er iets niet juist. Je hebt de twee hopelijk wel kunnen koppelen?

Om de andere variant vast te behandelen: Op het tweede formulier zet je nu deze code:

Code:
Private Sub Form_Load()
    If Not Nz(Me.OpenArgs, "") = "" Then
        Me.TrainingID.Value = Me.OpenArgs
    End If
End Sub

En die zet dus het ID van het eerste formulier netjes in het tekstvak van het tweede.
 
Bedankt de code werkt! ik krijg in ieders geval het Id in mijn tweede formulier!

Alleen zit het probleem hem nu in dat ik 8 records heb waarbij hij het id nummer moet laten zien alleen laat hij het Id nummer zien bij het eerste record. Hoe zorg ik ervoor dat hij ook bij de overige 7 records dit nummer weg zet?

of wil je liever een bestandje hebben zodat je het kan zien?
 
Kom je weer terug bij je eerste vraag :)
Wat dacht je er van om de standaardwaarde van het tweede formulier in te stellen op de waarde die je vanuit het eerste formulier krijgt?

Code:
Private Sub Form_Load()
    If Not Nz(Me.OpenArgs, "") = "" Then
        Me.TrainingID.Value = Me.OpenArgs
        Me!TrainingID.DefaultValue = Me.OpenArgs
    End If
End Sub
 
Jammer genoeg werkt deze code niet :( Heb nog steeds alleen bij mijn eerste record alleen het id :(

Heb je enig idee wat ik fout doe?
 
Geen idee; daarvoor zou ik toch wat meer moeten weten van de door jou gebruikte objecten etc.
 
Ik heb een testje gedaan op een willekeurig formulier dat ik toevallig open had, en het principe werkt gewoon. Wel moet je er voor zorgen dat de Veldnaam niet gelijk is aan de Objectnaam. En dat is nu net waar Access (ook al...) heel slecht in is, want als je een formulier maakt, krijgt het tekstobject dezelfde naam als de veldnaam. Daarom doe ik het meestal zo: ik zet voor de Objectnaam de letters txt.

Code:
Private Sub Form_Load()
    If Not Nz(Me.OpenArgs, "") = "" Then
        Me.txtVondstnummer = Me.OpenArgs
        Forms!determinatielijst!txtVondstnummer.DefaultValue = vondstnummer
    End If
End Sub
 
Bedankt alleen krijg ik het niet voor elkaar.

Ik upload zo het bestandje dan kan je zien wat ik fout doe;)
 
Heb het bestandje aangepast en kan hem nu wel uploaden.

Ik heb alles zo toegevoegd zoals je hebt aangegeven dus weet niet waar het fout gaat:(

Verder is het de bedoeling dat de actielijst steeds weer opnieuw leeg tevoorschijn komt(dus dat de actielijst echt per training gekoppeld is dat gebeurd dus met idtraining)

Ik wil je wel alvast bedanken voor alle moeite!!!!

Hierbij het bestandje!

Bekijk bijlage helpmij.zip
 
Laatst bewerkt:
In bijgaand voorbeeldje werkt alles nog niet perfect, maar je kunt wel ongeveer zien hoe e.e.a. zou kunnen werken. Ik heb voor de actielijst een doorlopend formulier gemaakt; eigenlijk zou je hiervoor een enkelvoudig formulier moeten hebben, want nu zie je, als je een nieuw record maakt, de actielijst 'geleegd' worden. Dat is niet zo, als je daarna in een vorig record klikt zie je dat alles er nog staat. Het is meer gedaan om te laten zien wat er gebeurt met de keuzelijst; die past zich namelijk aan aan het aantal mogelijke records.
Ook kun je in de actielijst nieuwe acties toevoegen; als je een actie typt die niet bestaat, wordt hij toegevoegd aan de tabel.
 

Bijlagen

Hallo beiden,
Nu gaat het in bovenstaand probleem om één variable, zijnde een Id welke van form1 naar form2 moet worden meegenomen.
Maar wat te doen als je meerdere variablen wil laten meeliften middels openargs?

Gr.
Andre
 
Daar is een mooie truc op! Je kunt inderdaad maar één OpenArgs variabele mee laten liften. Maar niemand verbied je om in die ene variabele meer gegevens te stoppen. Je kunt een variabele uiteraard vullen met gegevens uit meerdere velden. Het enige probleem is dan natuurlijk dat je die gegevens later weer uit elkaar moet trekken. Ik doe dat meestal als volgt:
Op het bronformulier verzamel ik alle gegevens ofwel in een aparte variabele die ik vul, ofwel gelijk als OpenArgs. Het voorbeeld is gebaseerd op de laatste variant.

Code:
        iBedrijf = Me.Parent.cboBedrijf.Column(0)
        DoCmd.OpenForm "fArtikelen", , , , acAdd, acDialog, CategorieID & "|"  & iBedrijf & "|" & NewData

Zoals je ziet, zijn er 3 variabelen. Deze worden gescheiden door het | teken.

Op het tweede formulier wordt de OpenArgs als volgt gesplitst:

Code:
    If Not IsNull(Me.OpenArgs) Then
        Dim sArgs As Variant
        sArgs = Split(Me.OpenArgs, "|")
        Me.txtCategorieID.Value = sArgs(0)
        Me.cboBedrijfID.Value = sArgs(1)
        Me.txtArtikel.SetFocus
        Me.txtArtikel.Value = sArgs(2)
        SendKeys "{F2}", True
    End If

De crux zit hem in het SPLIT commando: daarmee vul je eerst een matrix (array) variabele met de inhoud van de OpenArgs variabele. Daarbij gebruik je het | teken uiteraard als scheidingsteken. In het voorbeeld komen er 3 variabelen in de array te staan, onder de nummers sArgs(0), sArgs(1) en sArgs(2). Vervolgens ken je de inhoud van de drie variabelen toe aan de betreffende velden. En dat is in beginsel alles.
 
Laatst bewerkt:
Sorry voor de late reactie nog bedankt voor je bestandje alleen is dat niet wat ik als oplossing voor ogen zag. Het nadeel van een keuze lijstje is dat je vergeet welke acties er allemaal zijn voor de training vandaar dat ik mijn lijstje direct wil openen met alle acties die gedaan moeten worden. en daarna koppelen.

Heb je misschien nog een andere oplossing? want ik kan er zo geen meer bedenken. Als het niet lukt dan moet ik het opgegeven en weer terug naar excel.

Alvast bedankt :)
 
Het nadeel van een keuze lijstje is dat je vergeet welke acties er allemaal zijn voor de training
??
Het voordeel van een keuze lijstje is dat je niet vergeet welke acties er allemaal zijn voor de training. Lijkt mij..... Daarbij heb je de keuze tussen een Keuzelijst met invoervak (weinig ruimte op het formulier) of een Keuzelijst, die meer ruimte nodig heeft maar waarbij je wel alle opties kunt laten zien.
Terug naar Excel? Dat is alsof je besluit om de computer in te ruilen voor een kleitablet, omdat je bang bent dat je ooit in de woestijn zonder batterijen komt te zitten :D
 
haha klinkt inderdaad dramatisch zoals je het nu zegt:P.

De situatie is namelijk zo. Bij elke training die wordt gegeven moet je alle acties door lopen. Er zijn er zo'n 30 acties die bij elke training moet doen. Als ik met een keuze lijst zou werken zou ik dus bij elke training 30 keer een keuze moeten maken mocht ik dus 10 trainingen geven dat is dus 30x10 is 300 keer klikken zonder dat ik andere data heb ingevoerd, niet efficient denk ik zo.

Is het een optie om uit de tabel1 het laatste id te halen en deze als staandaard waarde te laden in tabel 2?
 
Kijk, als je het probleem nu gelijk goed neerlegt, krijg je ook andere oplossingen :D Want eigenlijk wil je heel wat anders: je wilt blijkbaar een nieuwe training toevoegen, en met één handeling alle bij die training horende activiteiten toevoegen aan de subtabel die bij de training hoort. Da's een heel ander probleem... En kan uiteraard opgelost worden met een VBA lus die 30 records toevoegt aan de tabel Trainingactiviteiten. Maar dat heeft niks met keuzelijsten te maken.
 
Inderdaad ik wil een nieuwe training toevoegen. En daaronder wil ik de lijst van 30 acties hebben staan. Dan hoef ik alleen nog maar de datums in te vullen en dan hoef ik minder werk te verrichten.

Hoop dat het zo duidelijker is :)

Wel is het zo. Dat elke actielijst natuurlijk bij een speciafieke training hoort, omdat niet elke training op de zelfde dag is en omdat je niet voor elke training evenveel tijd voor hebt.

Als eenmaal de nieuwe training is toegevoegd dan staan natuurlijk de training gegevens en de actielijst gekoppeld en kan je mooie rapporten maken (wat ook mijn bedoeling is)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan