Verwijzen naar control op gesloten formulier of rapport

Status
Niet open voor verdere reacties.

reneemettrie

Terugkerende gebruiker
Lid geworden
1 aug 2006
Berichten
1.233
Hoe verwijs je naar een control op een formulier of rapport dat niet openstaat?
Bv. Ik wil een rapport mailen met een variabel gegeven, bv de caption, die dan als onderwerp moet dienen.
Ik heb het nu zo opgelost maar vermoed dat er een meer elegante methode bestaat?

Code:
Sub test()
[B]Dim onderwerp As String
[/B][B]DoCmd.OpenReport reportname:="rpt_members", windowmode:=acHidden, view:=acViewPreview
onderwerp = Reports("rpt_Members").Caption
DoCmd.Close

[/B]DoCmd.SendObject objecttype:=acSendReport, objectname:="rpt_members", To:="Helpmij@gmail.com", _
[B]subject:=onderwerp[/B], outputformat:=acFormatPDF, Messagetext:="See attachment", EditMessage:=True
End Sub
 
Hoe verwijs je naar een control op een formulier of rapport dat niet openstaat?
Niet. Je kunt niet naar gesloten objecten verwijzen, je moet het dus eerst openen. Maar als je een Caption ergens uit haalt, dan is dat meestal een vaste tekst, dus dan is het een stuk simpeler om die tekst gelijk maar in te typen. Is die tekst variabel, dan komt die dus ergens vandaan op zeker moment. En omdat je die dus elders ook nodig hebt, zou ik hem op dat moment ook in een TempVars variabele zetten, dan kun je hem altijd en overal gebruiken.
 
bedankt!
Die caption was maar een voorbeeld want hier denk ik dat het hier simpeler is het rapport meteen te openen en dan te mailen.
Maar stel dat je het niet open voordat je het mailt: loop je met een public variabele niet het risico dat je tussen 2 aanroepen een run time error hebt en dat de waarde verloren gaat? Het was op vraag van een cursist die een database in de toekomst moet onderhouden en nog geen VBA ervaring heeft.
 
Ik heb het hier over een Tempvar variabele, niet over een Public variabele. Tempvars behouden hun waarde zolang je Access tenminste niet afsluit. Rapporten hoef je niet te openen om te mailen, dus als het om een mailing gaat, hoeft dat ook niet. Wél is het bij rapporten zo dat je, als je het rapport niet opent, de complete recordset onder het rapport mailt en niet een eventueel gefilterde recordset, dus om die reden filter ik rapporten nooit maar verander ik de onderliggende query met een QueryDef. Daarmee kun je een rapport gelijk mailen zonder het rapport te openen.
 
Bedankt, weeral iets bijgeleerd!

Heb ik het zo goed begrepen (eenvoudig voorbeeld)?
Ik start met een startformulier met keuzerondjes voor de taalkeuze in een frame:

Code:
Private Sub Form_Open(Cancel As Integer)
Tempvars.Add "Taal", "NL"
End Sub

Private Sub fra_taal_AfterUpdate()
Tempvars("Taal") = fra_taal.Value
End Sub

En bij het openen van een ander formulier wordt dan die keuze gebruikt:

Code:
Private Sub Form_Open(Cancel As Integer)
Select Case Tempvars("Taal")
Case 1
    Label3.Caption = "Naam"
    Label6.Caption = "Stad"
Case Else
    Label3.Caption = "Nom"
    Label6.Caption = "Ville"
End Select

End Sub
 
Die TempVars hebben toch wel veel potentieel, ik had er nog nooit van gehoord. Thuis ook opgezocht in drie boeken over Access VBA (ook dikke), staat niets over in...
 
Wél in de cursus :). En je kunt ze óók nog eens in queries en zo gebruiken. Dus als je een gebruikersnaam in een TempVar zet, kun je datasets filteren, rechten op formulieren instellen etc.
 
Aan die gebruikersnaam had ik ook al gedacht.
En ik ga die cursus echt eens doornemen op een rustig moment :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan