[VBA] Syntax probleem

Pagina: 1
Acties:
  • 233 views sinds 30-01-2008
  • Reageer

  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 18:55
Ik zit met een probleem waar ik niet uit kom. Als dit niet mag dan hoor ik het graag, maar ik probeer het toch, want ik heb echt lang gezocht, maar ik kom er niet uit... :(
Het gaat om het volgende stukje code in een formulier in MS Access;

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Public Function Criteria()

Reports! & rptnaam & !waarde = Form!rapportage!waarde
End Function

Public Function RapportGenereren()
    
    DoCmd.OpenReport rptnaam, acViewPreview
    Criteria
    DoCmd.Maximize
    RapportAfdrukken rptnaam
    End If
End Function


rptnaam is een globale variabele en kan gebruikt worden in de criteria functie. Alles werkt ook goed, maar ik krijg de syntax hierboven op de e.o.a. manier niet goed.

[ Voor 4% gewijzigd door Masch op 23-06-2003 12:30 ]

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!


  • KingRichard
  • Registratie: September 2002
  • Laatst online: 17-08 19:31

KingRichard

former Duke of Gloucester

Waarom is Criteria een aparte functie? En er staat een End If zonder If.
Visual Basic:
1
2
3
4
5
6
7
Public Function RapportGenereren()
    Dim objThisReport As Object
    Set objThisReport = DoCmd.OpenReport(rptNaam, acViewPreview)
    objThisReport.waarde = Form!rapportage!waarde
    DoCmd.Maximize
    RapportAfdrukken rptNaam
End Function
Zoiets?

a horse! a horse! my kingdom for a horse! (exeunt)
[got.profile] | [t.net.profile] | [specs]


  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 18:55
Oww.. sorry

Ik heb iets te veel code gedeleted (ivm antwoorden die nergens op slaan), om op die manier alleen de code over te houden die relevant is.

Het moet dus zijn;

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Function Criteria()

Reports! & rptnaam & !waarde = Form!rapportage!waarde
End Function

Public Function RapportGenereren()
    
If Rapportkeuze = 1 Then 
    rptnaam = rapportnaam
    DoCmd.OpenReport rptnaam, acViewPreview
    Criteria
    DoCmd.Maximize
    RapportAfdrukken rptnaam
    End If
End Function


Zodoende kan ik het opmaken van de criteria in het rapport in een functie houden. In dat geval hoef ik dus het object alleen maar naar de globale variabelen heen te halen?

Ik ga het nu gelijk uit proberen. Alvast bedankt voor de moeite _/-\o_

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!


  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 18:55
KingRichard schreef op 23 June 2003 @ 13:34:
Waarom is Criteria een aparte functie? En er staat een End If zonder If.
Visual Basic:
1
2
3
4
5
6
7
Public Function RapportGenereren()
    Dim objThisReport As Object
    Set objThisReport = DoCmd.OpenReport(rptNaam, acViewPreview)
    objThisReport.waarde = Form!rapportage!waarde
    DoCmd.Maximize
    RapportAfdrukken rptNaam
End Function
Zoiets?
Dit werkt helaas niet. Ik krijg de foutmelding "Compileerfout, er wordt een function of variabele verwacht". Maar volgens mij moet mijn bovenstaande manier (= mijn eigen manier) toch ook kunnen? Eigenlijk is mijn vraag alleen maar wat de syntax moet zijn. Wie??

[ Voor 6% gewijzigd door Masch op 23-06-2003 14:14 . Reden: typo ]

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!


  • KingRichard
  • Registratie: September 2002
  • Laatst online: 17-08 19:31

KingRichard

former Duke of Gloucester

Als je bij je oude code "rptnaam = rapportnaam" invoegt, moet je dat bij mijn code natuurlijk ook doen. Ik neem aan dat het fout ging bij de regel "Set objThisReport = DoCmd.OpenReport(rptNaam, acViewPreview)"?
En mijn vraag hierboven blijft staan. Waarom een aparte functie als er geen variabelen in voorkomen en hij maar één regel bevat? En waarom geeft je geen variabelen aan functies door? En de regel "rptnaam = rapportnaam" is natuurlijk ook wat overbodig; je kunt beter in de rest van de code de namen verwisselen. Zo kan ik nog wel even doorgaan... :O
Ik heb het idee dat je niet zo goed weet wat je code eigenlijk doet. Als dat zo is, raad ik je aan je eens wat te verdiepen in VBA. Lees de online-help goed door of koop een boek.

a horse! a horse! my kingdom for a horse! (exeunt)
[got.profile] | [t.net.profile] | [specs]


  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 18:55
KingRichard schreef op 23 June 2003 @ 14:34:
Als je bij je oude code "rptnaam = rapportnaam" invoegt, moet je dat bij mijn code natuurlijk ook doen. Ik neem aan dat het fout ging bij de regel "Set objThisReport = DoCmd.OpenReport(rptNaam, acViewPreview)"?
Inderdaad, daar ging het fout. Ik heb die regel er natuurlijk wel bij staan!
En mijn vraag hierboven blijft staan. Waarom een aparte functie als er geen variabelen in voorkomen en hij maar één regel bevat? En waarom geeft je geen variabelen aan functies door?
In de functie criteria worden de variabele rapporten opgemaakt, die in de functie 'rapport genereren' wordt bepaald.
En de regel "rptnaam = rapportnaam" is natuurlijk ook wat overbodig; je kunt beter in de rest van de code de namen verwisselen. Zo kan ik nog wel even doorgaan... :O
De regel "rptnaam = rapportnaam" wordt gegeven op basis van een groepsvak, dus zoiets;

code:
1
2
If groepsvak =1 then rptnaam = rapport1 :enzovoort
if groepsvak = 2 then rptnaam = rapport2 :enzovoort

Nu kan ik nog wel ff doorgaan mijn code uit te leggen, maar hier heb ik nu ff geen zin/ tijd in/ voor.
Ik heb het idee dat je niet zo goed weet wat je code eigenlijk doet. Als dat zo is, raad ik je aan je eens wat te verdiepen in VBA. Lees de online-help goed door of koop een boek.
Dit is alleen de basis van mijn code, ik hoef toch niet 100 regels te posten als 10 het probleem al laten zien. Ik weet misschien niet alles van VBA, maar ik ken zeker wel de basis! En doe alsjeblieft niet zo betweterig tegenover mij, dat is niet nodig.

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!


  • KingRichard
  • Registratie: September 2002
  • Laatst online: 17-08 19:31

KingRichard

former Duke of Gloucester

Het was niet mijn bedoeling om betweterig te doen. Daarom staat er ook "Ik heb het idee dat...". Ik snap dat je niet de hele code wilt posten, maar daardoor wordt het wel onoverzichtelijk. Zeker omdat je je code niet hebt voorzien van commentaar (betweterige tip! ;) ). En misschien kun je ook nog wat leren op deze manier. GoT is er ook niet om poeslief voor elkaar te zijn, maar om elkaar te helpen.

En ik zie dat ik een fout heb gemaakt!
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Public Function Criteria()
' Twee mogelijkheden:
    Application.Reports(rptnaam).waarde = Form!rapportage!waarde
    ' of
    objThisReport.waarde = Form!rapportage!waarde
' Het kan zijn dat beide niet werken; zie commentaar hieronder

End Function

Public Function RapportGenereren()
    Dim objThisReport As Object
    
    rptnaam = rapportnaam
    ' De volgende regel was fout...
    DoCmd.OpenReport rptnaam, acViewPreview
    Set objThisReport = Reports(rptnaam, acViewPreview)
    ' Nu gaat het tot hier goed, maar...
    ' Wat is .waarde? Kun je rechtstreeks een element van een
    ' rapport aanspreken op deze manier?
    ' Als dat niet zo is, dan gaat het mis in de regel hieronder.
    objThisReport.waarde = Form!rapportage!waarde
    DoCmd.Maximize
    RapportAfdrukken rptnaam
    Set objThisReport = Nothing     'object leegmaken
    
End Function
Nog maar eens proberen dan?

a horse! a horse! my kingdom for a horse! (exeunt)
[got.profile] | [t.net.profile] | [specs]


  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 18:55
OK, het is al goed. Ik denk dat ik het e.e.a. verkeerd begreep.

code:
1
2
3
4
5
6
Application.Reports(rptnaam).waarde = Form!rapportage!waarde
objThisReport.waarde = Form!rapportage!waarde
werken beiden niet..  :-(

Reports! & rptnaam & !waarde = Forms!rapportage!waarde
kan deze optie echt niet? Ik kan het me haast niet voorstellen?


of zoiets als dit (met de functie eval) ;

code:
1
2
set mijnRapportwaarde eval("Reports![" & rptnaam & "]!waarde")
mijnRapportwaarde = bla


Ik ga hier nu ff mee aan de gang. Ik houd dit topic natuurlijk in de gaten, dus enige hulp is altijd welkom!

[ Voor 14% gewijzigd door Masch op 23-06-2003 16:23 ]

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!


  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 18:55
Ik ben nu al een stuk verder. De criteria worden meegenomen en rollen goed uit de printer. De 'waardes' (textfields op het rapport) worden echter nog niet op het scherm weergeven? Nou moet ik dit waarschijnlijk met de repaint methode doen, maar dat schijnt niet te werken.

code:
1
2
DoCmd.RepaintObject acReport, rptnaam
RapportAfdrukken rptnaam


De eerste regel wordt dus niet uitgevoerd, de text in het rapport op het scherm is wit. De code loopt trouwens wel netjes door. In de tweede regel (rapportafdrukken is een functie die overal wordt gebruikt die vraagt of het rapport moet worden afgedrukt) wordt het echter wel afgedrukt.

Iemand enig idee wat ik fout doe?

[ Voor 5% gewijzigd door Masch op 24-06-2003 13:35 ]

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!


  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 18:55
*kick

Ik krijg het nog steeds niet voor elkaar op de een of andere manier. Ziet niemand wat ik fout doe??

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!


  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 18:55
Oké!! Opgelost.

De waarde's kun je niet aanpassen op het moment dat het rapport geopend is. Dit doe je als hij geopend wordt (dus in de code sectie van het rapport);

code:
1
2
3
4
Private Sub Paginakoptekstsectie_Format(Cancel As Integer, 
FormatCount As Integer)
    Me!BDI = Forms!rapportage!BDI
End Sub

offtopic:
Ik wist niet dat er een 'trigger' was voor het opmaken van de paginakoptekstsectie, en met mij denk ik vele tweakers, daarom post ik dit. Misschien toch handig voor mensen die dit topic volgden.

[ Voor 3% gewijzigd door Masch op 26-06-2003 15:39 ]

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!

Pagina: 1