Form openen vanuit subform

  • Onderwerp starter Onderwerp starter WAP
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

WAP

Gebruiker
Lid geworden
21 jun 2006
Berichten
14
Hallo,

Ik heb twee vragen:
1. Ik heb de enorme beperking dat ik niet kan omgaan met VBA. Is er mogelijk een boek/cursus waarin ik minimaal de beginselen onder de knie kan krijgen?

2. Vanuit een subformulier dient er en formulier te worden geopend waar aanvullende informatie geplaatst dient te worden.
Het probleem hierbij is dat het te openen formulier niet één maar twee specifieke gegevens moet zoeken.

In het formulier ( Veldnamen beginnen met KO_) dienen de volgende veldwaardes overgenomen te worden vanaf het doorlopend subfomulier (Veldnamen beginnen met KN)_. De knop voor het oproepen van het nieuwe formulier bevindt zich op de record regel.

KN_KlantbladID <-> KO_KlantbladID
KN-KlantbladTitel <-> KO_KlantbladTitel

voorbeeld.png


Kan iemand mij op het juiste spoor zetten?
Alvast hartelijk dank
 
1. Kijk bijvoorbeeld eens in de Handleidingen sectie; er zijn al heel wat afleveringen van de cursus Access beschikbaar waarin het programmeren ook aan bod komt.
2. Wellicht, als ik zou snappen wat je bedoelt.
 
Boek

Goedemorgen,

Als je werkt met Access2010 dan is het volgende boek wellicht iets voor je :

"Access 2010 VBA Programming, Inside Out" met het ISBN nummer 9780735659872

Het is wel "een dikke pil" en in engelse taal.

Mvg,

HH
 
Er zijn uiteraard ook Nederlandse vba boeken op de markt. Ik denk dat er nog maar weinig slechte boeken zijn; door de jaren heen (bij de verschillende Office versies) zijn de slechte vanzelf van de markt verdwenen. Kijk dus in het boek welke onderwerpen behandeld worden, en hoe uitgebreid, en kies op basis daarvan welk boek voor jou het meeste oplevert. Zelf vind ik de leesbaarheid (layout, taalgebruik) ook belangrijk. Kies dus een boek dat jouw (bijna letterlijk) 'aanspreekt'. Een boek dat je graag leest, pak je sneller.
Laat je bij je keuze overigens niet teveel leiden door de versie van het boek; programmeren is in Access 2000 niet veel anders als in 2010. Dus je kunt net zo goed een goedkoop boek over Access 2003 gebruiken als een duur boek over Access 2010. Tenzij je gelijk wilt gaan beginnen met het programmeren van Ribbons, want dat is uiteraard wel specifiek voor 2007 en hoger.
 
Michel en HH,
Hartelijk dank voor jullie reactie. voor wat betreft vraag 1 ben ik op het spoor gezet. Daarmee ga ik aan de slag. vwb vraag 2. Blijkbaar is deze niet duidelijk genoeg.
Daarom in bijlage een verduidelijking.
aanvulling op vraag.png
Alvast weer hartelijk bedankt
 
Begrijp ik het goed dat je een leeg formulier wilt invullen, met die twee gegevens uit het doorlopende formulier ingevuld?
 
Michel,
Alvast dank voor de reactie,
Ja, Ik wil het (doorlopend) formulier 'Memo klant blad'( onderste deel van de bijlage) vullen met de waardes vanuit het subformulier ( bovenste deel van de bijlage).
Ik ben mogelijk nog vergeten mede te delen dat het subformulier waar de veldwaardes vandaan moeten komen opgenomen is in een tabblad.

Gr. Wally
 
Tabbladen doen in deze niet ter zake, die zijn voor het formulier onzichtbaar. Je hebt niet goed uitgelegd dat beide formulieren op hetzelfde hoofdformulier staan; althans: dat maak ik nu op uit je verhaal. Je hebt het steeds over het openen van een extra formulier, maar daar is dus geen sprake van, want het formulier is al geopend. Alleen is het formulier niet juist gekoppeld aan het eerste subformulier, anders zou je probleem niet bestaan. En daar ligt dus al je antwoord: koppel de twee formulieren aan elkaar, en je bent er.
 
Michel,
De afgelopen weken heb ik al problemen gehad met het verduidelijken van het een en en ander. Blijkbaar lukt het mij nu ook niet...:)

De bijlage was een voorbeeld waaruit moest blijken dat het twee verschillende formulieren zijn, die NIET zijn opgenomen in één hoofdformulier.
Als je formulieren koppelt middels één veld is dit geen probleem, Met de wizard kom je een eind. (anders kan ik zelf nog een macro maken)
maar dat kan ik maar op één veld op beide formulieren koppelen. Wat ik zoek is hoe twee koppelingen aan te leggen.
Ik heb al geprobeerd een macro te maken waarin de 'where voorwaarde'gelijk is aan: ="[KO_KlantBladID]=" & [KN_KlantBladID] dat werkt maar als ik daar een tweede 'where voorwaarde aan wil toevoegen dan zie ik geen resultaat
De totale formule in 'where voorwaarden' ="[KO_KlantBladID]=" & [KN_KlantBladID] and "[KO_KlantBladtitel]=" &[KN_KlantBladTitel],

Ik hoop dat je wat geduld met mij hebt,

Gr. wally
 
Dus we gaan weer terug naar de stelling dat je met Formulier 1 een tweede formulier wilt openen... Prima! Met macro's ga ik je niet helpen, want die doe ik uit principe niet. Een VBA oplossing kun je uiteraard wel krijgen.
Die is relatief ook best makkelijk. Je kunt een formulier namelijk openen met het OpenArgs argument gevuld. Dit is een variabele waarmee je een string kunt meegeven als je een formulier opent. Op het te openen formulier lees je de OpenArgs vervolgens weer uit, en kun je de gegevens verder verwerken. De OpenArgs heeft één nadeel: je kunt maar één variabele meegeven. En dat lost jouw probleem dus eigenlijk niet op. Tenzij (en daar komt de truc:) je alle variabelen in één string zet, met een scheidingsteken. En op het tweede formulier die string vervolgens weer uit elkaar trekt. En dan is het probleem natuurlijk weg, want dan kun je in beginsel een oneindig aantal variabelen meegeven.
De noodzakelijke code ziet er dan zo uit:
Formulier 1
Code:
        DoCmd.OpenForm "fArtikelen", DataMode:=acFormAdd, WindowMode:=acDialog, OpenArgs:=Variable1 & "|" & Variable2 & "|" & Variable3

Formulier 2
Code:
Private Sub Form_Open(Cancel As Integer)
    If Not IsNull(Me.OpenArgs) Then
        Dim sArgs() As String
        sArgs = Split(Me.OpenArgs, "|")
        Me.Veld1.Value = sArgs(0)
        Me.Veld2.Value = sArgs(1)
        Me.Veld3.Value = sArgs(0)
    End If
End Sub
Ik zou zeggen: bestudeer het eens :)
 
Laatst bewerkt:
Michel,
Wow dat is een goede.. ik heb inmiddels de code tbv formulier 1 aangebracht. Uit controle blijkt dat de te verwachtte waardes kloppen.
Bij formulier 2 loop ik tegen een onverwacht probleempje aan. De sArgs(0) en (1) zijn voorzien van de juiste waardes. Deze hebben ze netjes overgenomen van de waardes uit de code van formulier 1.
Ik verwacht dan dat het Me.veld deze waarde heeft overgenomen, het is immers 'gelijk aan'. Dat is niet het geval.
Me.KO_KlantBladID.Value = sArgs(0)
Me.KO_KlantBladTitel.Value = sArgs(1)
Ik heb inmiddels een aantal dingen geprobeerd oa het verwijderen van 'Me.' Dat heeft geen effect, Dat was ook te verwachten.
Moet ik ergens een aanpassing maken.

Alvast hartelijk dank.
Gr. Wally
 
Ik gebruik deze techniek heel eg vaak, en hij werkt altijd. Ik zou zeggen: maak een voorbeeldje, want dan wil ik de formulieren wel eens met eigen ogen zien...
 
Michel,
In bijlage het uitgeklede bestand. Hierin staat wel alles waar het om gaat. Als je in de gelegenheid bent om dit te beoordelen dan graag.
Gr. Wally
 

Bijlagen

Je formulier had de eigenschap <Gegevensinvoer>=Ja. Dat kun je beter op Nee zetten; tenslotte wordt dat al vanuit het formulier geregeld. Als je de hele code verplaatst naar de gebeurtenis <Bij Laden> zal je zien dat hij het wel doet. Foutje bedankt...
Code:
Private Sub Form_Load()
    Dim sArgs() As String
    If Not IsNull(Me.OpenArgs) Then
        sArgs = Split(Me.OpenArgs, "|")
        Me.KO_KlantBladID.Value = sArgs(0)
        Me.KO_KlantBladTitel.Value = sArgs(1)
    End If
End Sub
Niet erg beef dus ;)
 
Michel,

Dank je wel. het werkt! Nogmaals hartelijk dank!!
 
Michel, Ik heb nog een aanvullende vraag mbt voorgaande oplossing.
Ik wil namelijk onder dit formulier een subfrm maken. In dit subfrm zijn de waardes opgenomen die eerder zijn toegevoegd.
Als je dit subfrm aanmaakt en koppelt zie je geen waardes. Mijn vermoeden is dat het nieuwe formulier, opgenomen onder het eerder gemaakte formulier.niet filtert omdat het oorspronkelijke formulier <gegevens invoer> op 'ja' staat.
Ik het het geprobeerd om beide formulieren op te nemn in en ander formulier, maar dat bied geen oplossing. Mede ook omdat je VBA code dan niet meer werkt. In bijlage een voorbeeld
Alvast hartelijk dank
 

Bijlagen

Laatst bewerkt:
Ik snap het probleem niet; je hebt in je voorbeeldje een formulier met een gekoppeld subformulier dat prima werkt. Al verbaast mij dat enigszins, want de Relaties zitten een beetje vreemd in elkaar vind ik. Zo heeft de tabel [Baas2] geen sleutelveld, en de tabel [TblKlant_Bladen] een gecombineerde (met KlantID uit Baas2, waar KlantID dus geen sleutel is). En tussen [TblKlant_blad_Memo] en [TblKlant_Bladen] is geen goede relatie te leggen, omdat in [TblKlant_blad_Memo] geen sleutelveld zit. Dus daar is nog wel winst te behalen.

Met Memo open je een nieuw formulier in Toevoegmodus, dus dan is het logisch dat je oudere records niet ziet. Zolang het nieuwe record niet is opgeslagen, is er geen referentie.
 
Laatst bewerkt:
Michel,
Dank voor je bericht. Je hebt gelijk als je stelt dat de 'sleutels' niet juist staan vermeld. Je opmerking dat het werkt begrijp ik niet. Het werkt namelijk niet.( zoals ik het bedoel)
De reden hiervan zal inderdaad zijn dat het nieuwe formulier in de Toevoegmodus wordt geopend en de 'oudere'records geen referentie hebben. Dat is het probleem..
Is er een andere oplossing te bedenken zodat de oudere records zichtbaar zijn en dat men de mogelijkheid heeft om op het zelfde (sub)formulier de nieuwe gegevens in te voeren?
Deze oudere records moeten moeten een relatie hebben met de klant en met het betreffende blad.

De oudere records zijn noodzakelijk en dienen zichtbaar te zijn.
Ik begin haast te geloven dat het niet mogelijk is en dat ik moet teruggrijpen naar de oplossing om alle gegevens (records)opnemen in één Memoveld.
Dit lijkt mij niet wenselijk, maar als het niet anders kan.

Ik hoor graag een reactie van je.
Alvast weer bedankt.
Gr. Wally
 
Je opent je Memo formulier met twee parameters: KN_KlantBladID & "|" & KN_KlantBladTitel. En je subformulier daarom is gekoppeld op basis van 3 velden. Dat gaat natuurlijk nooit werken. Wat doet dat veld [KO_KlantBladSysDatum] in de koppelvelden?
 
Michel,
Sorry dat ik zo laat reageer. Terecht geef je aan dat veld [KO_KlantBladSysDatum] niet thuis hoort in het koppelveld. Ik heb het aangepast, maar dat bied geen oplossing.
Ik heb in de eigenschappen van <SubfrmKlant_blad_Memo_Archief>, de eigenschappen 'Filteren op Leeg hoofdveld"gezet op 'Nee' Hierdoor worden alle gegevens zichtbaar, maar niet gefilterd op KN_KlantBladID en KN_KlantBladTitel ( Bijlage) Je hebt al eerder aangegeven dat je niet kunt koppelen op een leegveld. Vreemd is dit wel , immers ik zie de waardes op het scherm en ik ben er altijd vanuit gegaan dat waarden opgenomen in een veld altijd gelijk worden opgeslagen.
Ik heb inmiddels ook geprobeerd om de waardes , middels een macro, op te slaan, Maar ook dit geeft geen resultaat.
Is hetgeen ik vraag een hopeloze zaak??
Memoveld.jpg

Ik hoor het graag,

Gr. Wally
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan