tabelgegevens opvragen in functie()

Status
Niet open voor verdere reacties.

so10070

Gebruiker
Lid geworden
4 feb 2014
Berichten
424
Is het mogelijk om tabelgegevens op te vragen in een functie? Dit werkt niet.
Function Info(NummerVanDeMededeling As String)
Dim MNummer, MMededeling, MvbInstructie, MWindowInstructie, MFormulierNaam As String

GegevensMededeling = DLookup("[NrMededeling]", "TabelMededelingen", "[NrMededeling] = '" & NummerVanDeMededeling & "'")

MNummer = NrMededeling
MMededeling = TekstMededeling
MvbInstructie = vbInstructie
MWindowInstructie = WindowInstructie
MFormulierNaam = NaamFormulier

MsgBox TekstMededeling, vbIstructie, MWindowInstructie

End Function
 
DLookup is prima in een query, en ook nog wel in een functie te gebruiken. De manier waarop jij hem gebruikt is niet goed te bekijken zonder voorbeeld.
 
Het is de bedoeling dat als het record gevonden is de veldwaarden in variabelen gestoken worden (MNummer = NrMededeling, MMededeling = TekstMededeling, MvbInstructie = vbInstructie, MWindowInstructie = WindowInstructie, MFormulierNaam = NaamFormulier) die dan in een MsgBox gebruikt worden. Ik krijg alleen de waarden "Waar" en niet de inhoud van de velden. Dus alles werkt netjes op de inhouden van de velden (NrMededeling, TekstMededeling, vbInstructie, WindowInstructie) na. Hoe kan ik dat oplossen?
 
Maar hoe ziet de functie er dan verder uit? De DLookup zou, in het beste geval, de waarde van het veld [NrMededeling] ophalen en in MNummer zetten. De overige 'vergelijkingen' doen op deze manier inderdaad niks dan Waar of Onwaar opleveren, en dat je er Waar uit krijgt verbaast mij niks, want MvbInstructie = vbInstructie vergelijkt een leeg tekstveld (MvbInstructie) met een lege variabele (vbInstructie). Leeg=Leeg, dus is de vergelijking Waar.
Wil je met één handeling meerdere velden vullen, dan moet je een Recordset gebruiken. Werkt beter, en sneller, en gebruikt de correcte veldeigenschappen. You can't lose dus ;)
 
Ik heb het probleem zo opgelost en het werkt. De juiste info wordt nu met een DLookUp opgehaald en werkt. Met Recordset begrijp ik niet goed hoe ik het zou moeten doen.

Function info(NummerVanDeMededeling As Integer)
Dim MNummer As Integer
Dim MMededeling, MvbInstructie, MWindowInstructie, MFormulierNaam As String

MNummer = DLookup("[NrMededeling]", "TabelMededelingen", "[NrMededeling] =" & NummerVanDeMededeling)
MMededeling = DLookup("[TekstMededeling]", "TabelMededelingen", "[NrMededeling] =" & NummerVanDeMededeling)
MvbInstructie = DLookup("[vbInstructie]", "TabelMededelingen", "[NrMededeling] =" & NummerVanDeMededeling)
MWindowInstructie = DLookup("[WindowInstructie]", "TabelMededelingen", "[NrMededeling] =" & NummerVanDeMededeling)

Antwoord = MsgBox(MMededeling, Val(MvbInstructie), MWindowInstructie)

Select Case MvbInstructie
Case vbOKOnly, vbCritical, vbExclamation, vbInformation
NummerVanDeMededeling = Antwoord
Case vbOKCancel
If Antwoord = vbOK Then 'OK
NummerVanDeMededeling = Antwoord
Else 'Cancel
NummerVanDeMededeling = Antwoord
End If
Case vbAbortRetryIgnore
If Antwoord = vbAbort Then 'Abort
NummerVanDeMededeling = Antwoord
ElseIf Antwoord = vbRetry Then 'Retry
NummerVanDeMededeling = Antwoord
Else 'Ignore
NummerVanDeMededeling = Antwoord
End If
Case vbYesNoCancel
enz.
 
Zou je de code willen opmaken met de CODE knop? Zo is het niet echt lekker lezen...
 
Sorry. Hierbij nogmaals en hopelijk goed.

Code:
Function info(NummerVanDeMededeling As Integer)
  Dim MNummer As Integer
  Dim MMededeling, MvbInstructie, MWindowInstructie, MFormulierNaam As String

  MNummer = DLookup("[NrMededeling]", "TabelMededelingen", "[NrMededeling] =" & NummerVanDeMededeling)
  MMededeling = DLookup("[TekstMededeling]", "TabelMededelingen", "[NrMededeling] =" & NummerVanDeMededeling)
  MvbInstructie = DLookup("[vbInstructie]", "TabelMededelingen", "[NrMededeling] =" & NummerVanDeMededeling)
  MWindowInstructie = DLookup("[WindowInstructie]", "TabelMededelingen", "[NrMededeling] =" & NummerVanDeMededeling)

  Antwoord = MsgBox(MMededeling, Val(MvbInstructie), MWindowInstructie)

  Select Case MvbInstructie
    Case vbOKOnly, vbCritical, vbExclamation, vbInformation
        NummerVanDeMededeling = Antwoord
    Case vbOKCancel
        If Antwoord = vbOK Then 'OK
            NummerVanDeMededeling = Antwoord
        Else 'Cancel
            NummerVanDeMededeling = Antwoord
        End If
    Case vbAbortRetryIgnore
        If Antwoord = vbAbort Then 'Abort
            NummerVanDeMededeling = Antwoord
        ElseIf Antwoord = vbRetry Then 'Retry
            NummerVanDeMededeling = Antwoord
        Else 'Ignore
            NummerVanDeMededeling = Antwoord
        End If
    Case vbYesNoCancel
       enz.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan