OpenArgs (VB) probleem

Status
Niet open voor verdere reacties.

Nilvo

Gebruiker
Lid geworden
13 mei 2010
Berichten
20
Hallo,

De bedoeling is dat meerdere tabbladen vanaf meerdere knoppen kunnen worden bedient. Daarom kan ik het tabblad niet vast definiëren bij de "ontvangende" code

Code:
Private Sub Keuzelijst_met_invoervak350_DblClick(Cancel As Integer)
    Dim stDocName As String

    stDocName = "Contactpersoongegevens"
    DoCmd.OpenForm stDocName, , , , , acDialog, "pagina activiteiten" & "|" & Me![Id]
    
End Sub

Code:
Private Sub Form_Load()

Dim tabblad As String

If Not IsNull(Me.OpenArgs) Then
tabblad = Split(Me.OpenArgs, "|")(0)
Me.[Id] = Split(Me.OpenArgs, "|")(1)
Me(tabblad).SetFocus
End If

End Sub

Het probleem is dat ik een melding krijg dat me.[id] niet bijgewerkt kan worden.
weet iemand hoe ik dit kan oplossen?

Bij voorbaat dank.
 
Laatst bewerkt door een moderator:
Niet op deze manier; je kunt een tabblad niet de focus geven. Wel de onderliggende pagina's. Dat ziet er dan zo uit:
Code:
    Me.tabFormulieren.Pages("Foto's").SetFocus
 
Sorry voor de late reactie. Ben een aantal dagen weg geweest.

Ik heb het geprobeerd maar denk dat ik het niet helemaal snap wat je bedoelt.
Dit heb ik er nu van gemaakt:
Code:
Private Sub Form_Load()

Dim tabblad As String

If Not IsNull(Me.OpenArgs) Then
tabblad = Split(Me.OpenArgs, "|")(0)
Me.[Id] = Split(Me.OpenArgs, "|")(1)
Me.Contactpersoongegevens.Pages("tabblad").SetFocus
End If

End Sub
Contactpersoongegevens is het formulier
tabblad is de pagina die gewenst te zien wordt(tabblad zoals ik het noemde omdat het resultaat er zo uitzag)

Ik krijg de volgende foutmelding:

Compileerfout:
kan methode of gegevenslid niet vinden

hij highlite de tekst Contactpersoongegevens dan.

Komt dit omdat ik een structuele fout of een fout heb gemaakt met het invullen van pagina/formulier naam?

Gr Nilvo
 
Je gebruikt het SPLIT commando verkeerd.

Code:
Dim tmp as Variant
If Not IsNull(Me.OpenArgs) Then
     tmp=Split(Me.OpenArgs, "|")
     tabblad = tmp(0)
     Me.[Id] = tmp(1)
     Me.Contactpersoongegevens.Pages(tabblad).SetFocus
End If

Je gebruikt dus één variabele die gevuld wordt vanuit het Split commando. Dat kan één element zijn, maar uiteraard ook veel meer; je kunt met één string met bijvoorbeeld 12 scheidingstekens een matrix maken met 13 elementen. Omdat de telling met 0 begint, is het eerste element dus tmp(0), en het tweede is dan tmp(1).
 
Ik heb het aangepast zoals je zei, maar nog steeds de onderste regel die een compileer fout aangeeft.
Compileerfout:
kan methode of gegevenslid niet vinden

In de bijlage een afbeelding van de foutmelding

Bij voorbaat dank
 

Bijlagen

  • foutmelding.png
    foutmelding.png
    34,3 KB · Weergaven: 28
Laatst bewerkt:
Als ik even naar het begin van de draad ga, zie ik dat je een formulier opent met de naam Contactpersoongegevens. Deze regel: Me.Contactpersoongegevens.Pages(tabblad).SetFocus gaat er vanuit dat het tabcontrol zo heet. Dus ik vermoed nu dat je dezelfde naam twee keer gebruikt. En da's nie wijs...
 
Ok nu snap ik het even helemaal niet meer. Wat moet nou waar komen in die regel. Ik dacht Me."formuliernaam".pages("paginanaam of indexnummer").setfocus

Blijkbaar klopt dit niet. Wat moet nu precies op mijn "formuliernaam" staan? Ik snap niet wat je met tabcontrol noemt.

Bedankt, Nilvo
 
Nee, dat klopt niet: je verwijst naar een Page op het tabcontrol. Niet naar een Page op een formulier, want dat bestaat zelfs niet; een formulier heeft gaan Pages. Het tabcontrol is, geloof het of niet; het ding dat je maakt als je een Tabbesturingselement invoegt! Meestal heeft die dan een naam als TabbestEl7; hangt uiteraard van de versie af, en of je al Tabbesturingselementen hebt of niet. Op zo'n Tabbesturingselement heb je Pagina's; die hebben allemaal een eigen naam, en een Indexwaarde. Als je er een specifiek wilt selecteren, dan verwijs je dus ofwel naar de specifieke naam, ofwel naar het indexnummer.
Ik heb net vers van de pers een Tabbesturingselement op een formulier gezet, met de naam Tabbesturingselement, met twee pagina's. Die heten (vraag me niet waarom...) Pagina8 en Pagina9. Wil ik pagina 9 bij het openen van het formulier selecteren, dan is de opdracht derhalve:
Code:
Me.TabbestEl7.Pages(1).SetFocus
of:
Code:
Me.TabbestEl7.Pages("Pagina9").SetFocus

Zo simpel is het...
 
Toppie! het werkt nu zoals het zou moeten...

Ben alleen qua probleem terug bij post 1:confused:
Ik krijg nog steeds de foutmelding dat Me.[id] niet bijgewerkt kan worden. Ik snap ook echt niet waarom dit nu ineens niet kan, en voorheen bij alle andere verwijzingen wel.
fout 2.png

echt hartstikke bedankt voor alle hulp! Je vorige uitleg was ook echt duidelijk! Ik snap nu ook wel waarom een formulier geen pages heeft, simpelweg omdat dat een besturingselement binnen het formulier is.

Gr Nilvo
 
Is Me!Id geen Autonummer?
Ik denk dat je iets anders wilt doen dan je code suggereert.
Geef eens precies aan wat je wilt gaan doen.

Een tabbesturingselement is eigenlijk niets anders dan een 'container' voor controls van een formulier. Dus iets om alleen controls op een bepaalde manier te laten zien.
Als op pagina 'zoveel' van een tabbesturingselement een tekstvak staat, en je geeft dat tekstvak de focus, dan wordt automatisch pagina 'zoveel' actief. Een andere manier om een tabblad actief te maken is om het tabbesturingselement een waarde te geven die overeenkomt met die pagina. Voorbeeld Me!tbMijnTab=3, laat pagina 4 zien van het tabbesturingselement tbMijnTab (immers Access telt in de regel vanaf 0). De waarde van het tabbesturingselement geeft dus de actieve pagina. Vooral bij het maken van eigen 'wizards' kan dat handig zijn.

Overigens kent een formulier ook paginas, op het moment dat een page-break control op het formulier wordt gezet. In de eerste versies van Access, die geen tabcontrol hadden, was dat de methode om controls gegroepeerd te laten zien.
 
Me!id is inderdaad een autonummer. De reden waarom ik aannam dat dit zo kon, is omdat in onderstaande code het wel zo schijnt te werken:S
Code:
Private Sub Form_BeforeInsert(Cancel As Integer)
Me.[Id] = Forms![Contactpersoongegevens]![Id]
End Sub

De bedoeling is dat vanaf meedere plaatsen doorgeklikt kan worden naar een formulier waar gegevens van contacten kunnen worden ingevuld. Als je bv in de kolom activiteiten klikt, opent het formulier op de pagina "activiteiten" bij het desbetreffende contact. vandaar me.id = tmp(1)

Het tabbesturingselement wordt nu al gebruikt om de goede pagina te laten zien. Alleen de goede gegevens moeten nog bij de pagina gekozen worden.

Bedankt voor alle hulp!
 
We weten nog steeds niet of ID een autonummerveld is of niet.... En dat is toch wel belangrijke informatie... Maak anders een voorbeeldje.
 
tabblad

Nilvo,

Niet alleen het Id is van belang, maar ook of je vanuit 1 formulier wilt gaan naar de tabbladen met een keuzelijst.
 
Die opmerking van Pletter snap ik niet helemaal; ik vermoed dat je een formulier opent vanuit een ander formulier; en dat je in dat tweede formulier het record wilt zien dat overeenkomt met het actieve record in het eerste formulier. Oftewel: je filtert het tweede formulier op basis van het eerste formulier. Als dat zo is, werkt je aanpak overigens niet, maar dat wist je al :) Een andere optie is, dat je een nieuw record wilt toevoegen in het tweede formulier, en dat de waarden uit het eerste formulier moeten worden meegenomen en ingevuld. Dat zou moeten werken, als je het tweede formulier opent in Toevoegmodus. Maar dat doe je dan ook weer niet..... Verwarring dus...
 
tabblad

OctaFish,

Denk dat mijn re duidelijk is;

Niet alleen het Id is van belang maar ook of het vanuit 1 formulier gaat.

Vanuit 1 formulier is het eenvoudig om naar een ander tabblad te gaan vanuit een keuzelijst.

Als je ander formulier zit dan zal het verhaal iets anders worden.

Nilvo zal hier opheldering over kunnen geven.
 
Laatst bewerkt:
Beste...

Id is inderdaad een autonummer.
Naar het formulier contactpersoongegevens wordt verwezen vanuit een ander formulier (genaamd lijst met contactpersonen)
Het formulier "lijst met contactpersonen" laat gegevens zien die worden uitgelezen uit de query.

Als je dus vanaf de lijst klikt op een link in de kolom "activiteiten" opent een pop up van contactpersoongegevens, op de pagina met de activiteiten van die contactpersoon. Als er geklikt wordt op de naam van de contactpersoon opent de pagina gegevens van die contactpersoon.

Als ik het zo lees heeft Octafish het aan het rechte eind

Wat bedoel je met toevoegmodus? Op de geopende pagina kunnen de gegevens aangepast worden, zodat ze in de tabel veranderen.

Hoop dat het zo duidelijk is...
Gr Nilvo
 
Je zegt het al: op de geopende pagina kunnen de gegevens worden aangepast. Als dat je bedoeling is, dan lijkt mij dat prima. Hoef je verder niet zoveel te veranderen. Behalve dan de methodiek waarmee je het formulier opent. Daarvoor kun je namelijk ook de WHERE parameter gebruiken. Ik weet nog steeds niet wat je bedoeling is met het tweede formulier!
 
Beste Octafish, het eerste formulier(de lijst) is gewoon een opsomming van alle gegevens van alle contactpersonen.
Het 2e formulier is om de gegevens in te voeren/aan te passen.

Het 2e formulier bestaat ui de 2 pagina's, gegevens en activiteiten.

Gr Nilvo
 
Invoeren en aanpassen zijn twee verschillende activiteiten; zowiezo kun je niet iets aanpassen dat nog niet in het systeem zit, dus je tweede formulier kan alleen gebruikt worden op deze manier om records op te zoeken. En dat zou ik niet doen met OpenArgs, maar met een filter. OpenArgs gebruik je bijvoorbeeld als je de gebeurtenis <Bij niet in lijst> wilt gebruiken.
 
Op dit moment zie ik door de bomen het bos niet meer...:(

Zou u er anders naar willen kijken? Ik ben bang dat het een heel klein stuk code is dat nodig is voor de gewenste functie, maar dat ik dit door mijn beperkte kennis niet voor elkaar ga krijgen...

Gr Nilvo
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan