Mensen,
Ik zit met het onderstaande dillema waar ik al een aantal dagen mee aan het prutsen ben hier op het werk. Je ziet in onderstaande codes drie functies, die allemaal werken. Als ik echter de functie findklant() gebruik in findcontact(), dus een functie in een functie, dan krijg ik de onderstaande foutmelding;
Is het op de een of andere manier in vba soms niet mogelijk om een functie in een functie te gebruiken oid??
Hieronder mijn code
Ik zit met het onderstaande dillema waar ik al een aantal dagen mee aan het prutsen ben hier op het werk. Je ziet in onderstaande codes drie functies, die allemaal werken. Als ik echter de functie findklant() gebruik in findcontact(), dus een functie in een functie, dan krijg ik de onderstaande foutmelding;
Dit is zeer onlogisch, omdat de code helemaal niet langs een .edit en .addnew langs komt. Dit weet ik zeker, omdat ik het allemaal netjes stap voor stap heb doorlopen. De functie findklant geeft ook de juiste waarde mee, maar nadat de functie is afgerond, dan krijg ik dus de foutmelding.Fout 3020 tijdens uitvoering:
Update or CancelUpdate without .AddNew or .Edit
Is het op de een of andere manier in vba soms niet mogelijk om een functie in een functie te gebruiken oid??
Hieronder mijn code
code:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
| Public Function importoffertes()
' hier zit veel niet relevante code
newrst.AddNew
newrst!Offertenummer = !Offertenummer
newrst!Nummer = !Offertenummer
newrst!Klantnummer = FindKlant(!Klantcode) <---- Dit gaat goed
newrst!CID = FindContact(!Klantcode)
'etc niet relevante code en later ook een .update
end function
Public Function FindKlant(code As String) As Long
'1 --> Klant aanwezig in huidige database ?(zoek en vind code)
strSQL = "SELECT * " & _
"FROM [klant NAW] "
Set newklantrst = newdb.OpenRecordset(strSQL)
With newklantrst
.FindFirst "klantcode = '" & code & "'"
If .NoMatch = False Then
'1 --> Klant aanwezig in huidige database
FindKlant = !Klantnummer
Else
'2 --> Klant overhalen uit oudere database
strSQL = "SELECT * " & _
"FROM [Klant NAW] "
Set oldklantrst = olddb.OpenRecordset(strSQL)
oldklantrst.FindFirst "klantcode = '" & code & "'"
.AddNew
!Klantnummer = lngKlt_nummer + 1
!Klantcode = oldklantrst!Klantcode
'Hier zitten nog veel meer velden die gevuld worden
lngKlt_nummer = lngKlt_nummer + 1
.update
FindKlant = !Klantnummer
End If
End With
End Function
Public Function FindContact(code As String) As Long
'1 --> Vind contactpersoon zoals ingevuld in oude database
strSQL = "SELECT klantcode, contactpersoon, telnr, faxnr " & _
"FROM [Klant NAW] " & _
"WHERE klantcode = '" & code & "'"
Set oldklantrst = olddb.OpenRecordset(strSQL)
If IsNull(oldklantrst!Contactpersoon) = True Then
ContactNaam = "DUMMY"
Else
ContactNaam = oldklantrst!Contactpersoon
End If
If ContactNaam = "DUMMY" Then
strSQL = "SELECT * " & _
"FROM Contactpersonen "
Set newklantrst = newdb.OpenRecordset(strSQL)
With newklantrst
.AddNew
!Naam = "Dummy Contactpersoon"
!Klantnummer = FindKlant(code) <--------- Dit gaat dus fout
.Update
FindContact = !CID
End With
'etc code indien andere voorwaarden |
edit:
Als ik in de foutopsporing het volgende commando geef;
debug.Print Findklant(code)
Dan geeft hij wel netjes de juiste klantcode
Als ik in de foutopsporing het volgende commando geef;
debug.Print Findklant(code)
Dan geeft hij wel netjes de juiste klantcode
[ Voor 23% gewijzigd door Masch op 14-11-2003 09:21 . Reden: code ff afgemaakt + toevoeging ]
(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!