Avatar billede Louise1985 Mester
20. juni 2016 - 11:45 Der er 9 kommentarer og
1 løsning

"Ikke defineret funktion" når kodemodul kaldes i query

Hej

Jeg har lavet (med hjælp fra anden god bruger på Eksperten) et script som finder tal i en tekststreng.

Det ser sådan her ud:
---
Option Compare Database

Public Function FindTal(Ind As String) As Integer
Dim I As Integer
For I = 1 To Len(Ind)

If IsNumeric(Mid(Ind, I, 1)) Then
FindTal = FindTal & Mid(Ind, I, 1)
End If
Next
If IsEmpty(FindTal) Then FindTal = 0

End Function
---

Når jeg forsøger at kalde denne funktion i en query (den skal fremfinde alle tal per entry i et bestemt felt) med følgende formel:

"FindTal([Betalingsbetingelser]) as Nettodage"

fremkommer den med følgende fejlmeddelelse:

"Der er en ikke-defineret funktion i "FindTal " udtrykket".

Kan I se hvad jeg gør galt?

Pft!

Vh Louise
Avatar billede fdata Forsker
20. juni 2016 - 12:18 #1
Er du sikker på at koden ligger i et modul, der er globalt for din base (og altså ikke i f.eks. en formular)?
Har du valgt Insert/Module i VBA editoren?
Avatar billede Slettet bruger
20. juni 2016 - 12:27 #2
Betalingsudtrykket mener jeg ikke skal stå i [ ] - prøv det engang

også mener jeg at du mangler en "end if" til sidst
Avatar billede Louise1985 Mester
20. juni 2016 - 12:36 #3
Tak for svarene!
@fdata: Ja, koden er indsat i et nyt modul i VBA editoren. Nu ligger den som et modul i min access database (den er synlig under "Moduler" når jeg lukker VBA editoren).
Hvis jeg fremsøger funktionen i min query fremfinder den også "FindTal"-funktionen. Den ser bare ikke ud til at virke...

@Thomas: Jeg har nu ændret koden til dette:
---
Option Compare Database

Public Function FindTal(Ind As String) As Integer
Dim I As Integer
For I = 1 To Len(Ind)

If IsNumeric(Mid(Ind, I, 1)) Then
FindTal = FindTal & Mid(Ind, I, 1)
End If
Next
If IsEmpty(FindTal) Then FindTal = 0
End If

End Function
---
Samt fjernet [ ] fra mit felt i query-forespørgslen - jeg får desværre stadig samme fejl. Tror I der foreligger en fejl i scriptet?
Avatar billede fdata Forsker
20. juni 2016 - 12:50 #4
Her lige tjekket din funktion. Brug den oprindelige. Den spiller.
En lille test-query ser også ud til at spille:
SELECT Betalingsbetingelser, FindTal(Betalingsbetingelser) AS Nettodage
FROM Tabel1;
--------
Betalingsbetingelser    Nettodage
N7    7
10N    10
LM10    10
LM    0
--------
Avatar billede Louise1985 Mester
20. juni 2016 - 13:08 #5
Fedt at du kan få den til at virke!!

Det kan jeg ikke. Hvis jeg laver en test a la din får jeg stadig samme fejlmeddelelse:

SELECT tbl_WAMTred.Betalingsbetingelser, FindTal(Betalingsbetingelser) AS Nettodage
FROM tbl_WAMTred;

Kan du fortælle mig hvordan du laver modulet inde i VBA editoren? Måske har jeg gjort noget forkert der?

Jeg har åbnet VBA editoren --> Indsat nyt modul --> Indsat scriptet --> Gemt modulet som "FindTal" --> Lukket ned
Avatar billede Louise1985 Mester
20. juni 2016 - 13:11 #6
Kan det muligvis have noget at gøre med de værdier jeg har i opslagstabellen? Der forekommer også "+" i nogle af de felter den skal slå op i.
Avatar billede Louise1985 Mester
20. juni 2016 - 13:12 #7
Følgende værdier findes i kolonnen den skal slå op i:
Betalingsbetingelser
10N
10N
12N
14N
14N
15N
17N
20N
21N
21N
23N
25N
30N
30N
45N
5N
60N
6N
7N
7N
7N
8N
9N
LB
LB 30
LB1
LB10
LB14
LB15
LB20
LB25
LB30
LB30
LB40
LB45
LB5
LB60
LB60
LM+10
LM+15
LM+20
N14
N20
N30
N8
NK
Avatar billede fdata Forsker
20. juni 2016 - 13:49 #8
Jeg har testet med alle din værdier. Intet problem.

Til gengæld er det måske et problem at du har gemt modulet med navnet FindTal. Det er jo det samme som funktionens navn. Access er ikke glad for at man bruger samme betegnelse for to forskellige objekter/funktioner.

Prøv at omdøbe dit modul.
Avatar billede Louise1985 Mester
20. juni 2016 - 14:06 #9
That did the trick!
TAK!
Fedt at det bare var en omdøbning der skulle til! :)
Endnu engang tak!
Avatar billede fdata Forsker
20. juni 2016 - 15:40 #10
You live and learn  ;O)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester