Code probleem

Status
Niet open voor verdere reacties.

remmie63

Gebruiker
Lid geworden
4 jan 2011
Berichten
378
Help! Ik heb een werkscherm gemaakt met daarin een knop met de functie om een rapport te bekijken. Nu wil ik deze knop graag zo laten werken dat als er in het veld [(Leverancier)] "magazijn" staat het rapport "interne bestelling" wordt weergegeven. Staat er in het veld [(Leverancier)] een andere waarde dan "magazijn" dan moet het rapport "externe bestelling" worden geopend.
Ik ben begonnen met onderstaande code, hij loopt echter vast. Ik heb in alle variaties die ik kon bedenken waarschijnlijk ook alle foutmeldingen gehad die binnen Access mogelijk zijn.

Code:
Private Sub Knop5_Click()
On Error GoTo Err_Knop5_Click

    Dim stDocName As String
    
    If [(Leverancier)] = "Magazijn" Then
    stDocName = "Bestelfax interne leverancier"
    DoCmd.OpenReport stDocName, acPreview
    Else
    stDocName = "Bestelfax externe leverancier"
    DoCmd.OpenReport stDocName, acPreview
    
    End If
    
Exit_Knop5_Click:
   
Err_Knop5_Click:
    MsgBox Err.Description
    Resume Exit_Knop5_Click
    
End Sub

Graag hulp waar de fout zit? En graag ook, indien mogelijk, uitleg waarom het zo moet?

Bij voorbaat dank.:thumb:

Groet, Remco
 
Laatst bewerkt door een moderator:
Je fout zit in de blauwe regel.

Code:
Private Sub Knop5_Click()
On Error GoTo Foutje
Dim stDocName As String

[B][COLOR="blue"]If Me!Leverancier = &  "'Magazijn'" Then[/COLOR][/B]
     stDocName = "Bestelfax interne leverancier"
Else
     stDocName = "Bestelfax externe leverancier"
End If
     DoCmd.OpenReport stDocName, acPreview

Exit Sub

Foutje:
MsgBox Err.Description

End Sub

Wat daar fout aan was? Je maakt van de vergelijking een tekststring. Dat werkt niet: je moet een Veld vergelijken met een waarde. Omdat die waarde een tekststring is, staan er quootjes omheen.
 
Laatst bewerkt:
Hallo Octafish,

Maar een veld wordt toch als volgt geschreven: [(Leverancier)].
Ik heb de code ingepast. Ik krijg de foutmelding: compileerfout en de volgende regel blauw: If Me! Leverancier = & "'Magazijn'" Then.

Groet.
 
Ik werk meestal met een waarde uit een keuzelijst, zelden met een vaste tekst. Dus dat is nog een beetje puzzelen ;)
In ieder geval is dit fout: [(Leverancier)]. Veldnamen mogen tussen rechte haken, waarbij ze verplicht zijn als er een spatie in de veldnaam zit. Dus niet: [(]Leverancier)] maar [Leverancier] of Leverancier. Of, als je toch (volkomen onnodig) haakjes wilt gebruiken: ([Leverancier]).
En de If functie zou ook dit kunnen zijn: If Me!Leverancier = "Magazijn" Then
 
Dit heb ik ingevoegd onder de bestaande knop:

Code:
Private Sub Knop22_Click()
On Error GoTo Foutje
Dim stDocName As String

'procedure opent en selecteert afhankelijk van de invoer het juiste rapport

If Me!Leverancier = "Magazijn" Then
     stDocName = "Bestelfax interne leverancier"
Else
     stDocName = "Bestelfax externe leverancier"
End If
     DoCmd.OpenReport stDocName, acPreview

Exit Sub

Foutje:
MsgBox Err.Description

End Sub

Ik krijg nu steeds de foutmelding: "kan het veld leverancier niet vinden". Terwijl het rapport waar de code naar verwijst gewoon een veld leverancier heeft.
Als ik de knop maak verwijst hij naar 1 rapport "Bestelfax externe leverancier" dan verander ik de code en krijg ik dus de foutmelding.
Wat doe ik verkeerd?

Groet, Remco
 
Laatst bewerkt door een moderator:
Je moet ook niet naar het veld verwijzen, maar naar het tekstveld. Eén van de nadelen van het uitroepteken is dat je exact moet weten hoe het object heet. Zo niet: foutmelding. Daarom maak ik mijn verwijzingen meesta vanuit het Me commando. Zodra je Me. intypt (let op de punt achter Me) krijg je een lijst met objecten van het formulier. Heet je tekstveld Leverancier, dan staat hij er echt wel bij. Heet hij txtLeverancier (aanbevolen, wat mij betreft, zodat je onderscheid hebt tussen het formulierveld en het tabelveld) dan typ je: Me.txtL waarna Access je het juiste object op een presenteerblaadje aanbiedt.
Waarom mensen toch consequent het uitroepteken blijven gebruiken, en niet Me? Voor die vraag heb ik geen antwoord....
 
Beste Octafish, helaas toch niet!
Ik heb inderdaad achter de me. het formulier gespecificeerd uit de dropdownlist. Vervolgens het veld Leverancier. Hij opent nu wel het rapport maar ongeacht de invoer steeds hetzelfde rapport " bestelfax externe leverancier"
Het ziet er nu zo uit:

Private Sub Knop22_Click()
On Error GoTo Foutje

Dim stDocName As String

If Me.Form_selectie_producten!Leverancier = "Magazijn" Then
stDocName = "Bestelfax interne leverancier"
Else
stDocName = "Bestelfax externe leverancier"
End If
DoCmd.OpenReport stDocName, acPreview

Exit Sub

Foutje:
MsgBox Err.Description

End Sub

Ergens zit nog een foutje. Kun jij aangeven waar deze zit?

Groet, Remco:)
 
En wat zie je als je deze code toevoegt: Msgbox Me.Form_selectie_producten!Leverancier ?
 
Msgbox Me.Form_selectie_producten!Leverancier = "Magazijn" Then

Dan geeft hij een compileerfout aan.
 
Dan wordt-ie zo:

Private Sub Knop22_Click()
On Error GoTo Foutje
Dim stDocName As String

MsgBox Me.Form_selectie_producten!Leverancier
If Me.Form_selectie_producten!Leverancier = "Magazijn" Then
stDocName = "Bestelfax interne leverancier"
Else
stDocName = "Bestelfax externe leverancier"
End If
DoCmd.OpenReport stDocName, acPreview

Exit Sub

Foutje:
MsgBox Err.Description

End Sub

Ik krijg een foutmelding met de naam van de eerste leverancier in de keuzelijst van het veld "leverancier".
 
Wat komt er uit de msgbox? Want dat wil ik eigenlijk weten.... Die foutmelding wisten we al ;)
 
Ai...................geeft een scherm met foutmelding aan........??:(

Ik merk nu dat het veld Leverancier altijd een zwarte achtergrond heeft met witte letters terwijl dit veld hetzelfde is ingesteld als de andere velden in de tabel met witte achtergrond en zwarte tekst. Ik ga even zoeken of daar iets fout zit.
 
In de achterliggende tabel en query is de tekst normaal. Pas in het formulier krijgt de tekst de zwarte achtergrond. Kan er verder weinig aan ontdekken. Alles functioneert ook normaal. Ga er dus vanuit dat daar de fout in ieder geval niet in zit.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan