Toon posts:

[VBA] Access > Lege cells opvangen ?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik moet voor m'n werk een tijdelijke oplossing uitzoeken met Access, totdat onze 'strategic solution' in orde is.

De data komt enerzijds van een MSM database en anderzijds van een bestand die klanten ons leveren. Die file moet gematched worden met met hetgeen uit MSM komt.

Nu zou ik alle accenten eruit moeten goeien. Dat lukt me met dit VBA script:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Option Compare Database

Public Function RemoveAccentUCase(S As String) As String

Const O As String = "àâäèéêëïîôöüùûç"        ' characters to replace
Const N As String = "aaaeeeeiioouuuc"        ' remplacement characters

Dim I As Byte

If (Len(S) >= 1) Then
    For I = 1 To Len(O)
        Let S = Replace(LCase$(S), Mid$(O, I, 1), Mid$(N, I, 1), , , vbTextCompare)
    Next I
End If

RemoveAccentUCase = UCase(S)

End Function


Nu werkt dit perfect in deze query:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT Accounts.[Record ID], 
Accounts.[Msm Estab Key], 
Accounts.[Adb Acct Urn], 
Accounts.[Company Id], 
Accounts.[Addr Type], 
Accounts.[Estab Name], 
RemoveAccentUCase(Accounts![Company Name Upper]) AS [Company Name Upper], 
RemoveAccentUCase(Accounts.[Company Name 15]) AS [Company Name 15], 
RemoveAccentUCase(Accounts.[Company Name 10]) AS [Company Name 10], 
RemoveAccentUCase(Accounts.[Company Name 5]) AS [Company Name 5], 
Accounts.Addr1, 
Accounts.Addr2, 
Accounts.Addr3, 
RemoveAccentUCase(Accounts.[Address Upper]) AS [Address Upper], 
RemoveAccentUCase(Accounts.[Address 15]) AS [Address 15], 
RemoveAccentUCase(Accounts.[Address 10]) AS [Address 10], 
RemoveAccentUCase(Accounts.[Address 5]) AS [Address 5], 
RemoveAccentUCase(Accounts.City) AS City, 
Accounts.Zipcode, 
Accounts.[Phone Num OK], 
Accounts.[Fax Num OK]
FROM Accounts;


Als één van die velden leeg is, komt er #Error tevoorschijn ipv gewoon leeg te blijven.
Test inbouwen zoals if(not isNull(S)) then ... helpen niet.
Enig idee hoe dat moet ?

Ik ben nu niet bepaald een VB programmeur omdat ik er nooit veel interesse in dat taaltje heb gehad.

[ Voor 2% gewijzigd door Verwijderd op 26-08-2004 16:33 . Reden: Layout aangepast ]


  • Bud_s
  • Registratie: Maart 2002
  • Laatst online: 23-05 13:46
Deze test ook geprobeerd ?
code:
1
Select case when field = "?*" then RemoveAccentUCase(field) else "" end as newfield


"If is Null " werkt volgens mij niet in een sqlstring , case werkt wel
(heb nog nooit met Null in case gewerkt)

[ Voor 16% gewijzigd door Bud_s op 26-08-2004 15:37 ]


Verwijderd

Topicstarter
Dat wil ie precies niet slikken...

Is er geen manier om een test te doen op de variabele S in de functie zelf ?

  • Bud_s
  • Registratie: Maart 2002
  • Laatst online: 23-05 13:46
Wanneer krijg je de foutmleding, debug de code eens.
Gaat hij toevallig op regel 16 in de function stuk ??

Zet daar anders ook eens een test op de lengte van de string
Beter nog, zet regel 16 tussen r13 en r14 :)

[ Voor 34% gewijzigd door Bud_s op 26-08-2004 16:23 ]


  • tazzman
  • Registratie: Juli 2000
  • Laatst online: 05-01 10:48

tazzman

a real boardmonkey

Kent Access het ISNULL SQL statement niet? (Dus niet het VBA/VB statement).
Wrap anders de variable in een ISNULL(var, '') statement. Dat gebruik ik zelf ook nog wel eens - je NULL values worden nu gewoon lege strings waarop je String functies niet klappen.

Het nieuwe speelgoed: een Saab 9-3 Aero (absoluut, helemaal en compleet fantastisch....)


Verwijderd

Topicstarter
Dat helpt ook niet.

Eens uitzoeken of dat ding een debugger heeft.

  • Bud_s
  • Registratie: Maart 2002
  • Laatst online: 23-05 13:46
vanuit de VBA editor, regel selecteren, en op F9 rammen :) Starten maar , en je ziet wel waar hij stopt.
Met F8 kan je hem doorstappen :)


PS: gooi ff het tweede gedeelte van regel14 van je query op een nieuwe regel, blijft de layout ook leuk :)

[ Voor 29% gewijzigd door Bud_s op 26-08-2004 16:27 ]


Verwijderd

Topicstarter
Met een Make-Table query herkent ie 3391 NULLs (#Error) en verwijdert hij ze.
Da's voor mijn part ook goed, maar toch een slordige oplossing :|

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Verwijderd schreef op 26 augustus 2004 @ 15:23:
code:
1
Public Function RemoveAccentUCase(S As String) As String


Als één van die velden leeg is, komt er #Error tevoorschijn ipv gewoon leeg te blijven.
Test inbouwen zoals if(not isNull(S)) then ... helpen niet.
Enig idee hoe dat moet ?

Ik ben nu niet bepaald een VB programmeur omdat ik er nooit veel interesse in dat taaltje heb gehad.
Iets minder denigrerend mag ook wel... Bovendien is het niet een typische VB fout, maar klopt je declaratie niet. Je functie accepteert alleen strings als input, en null levert dus een foutmelding.


code:
1
2
3
4
5
Public Function RemoveAccentUCase(ByVal S As String) As String
of
Public Function RemoveAccentUCase(S As variant) As String
if not isnull(s) then
etc

ALs je ook een null terug wilt kunnen geven dan wordt het zelfs
code:
1
function RemoveAccent(s [as variant]) [as variant]
:)

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Topicstarter
Bedankt... ik wou niet denigrerend klinken. Heb alleen een héél slechte ervaring aan dat vak overgehouden.

Op een examen mocht je een app niet sluiten met een klik op het kruisje. Nu was dat gewoon één enkele lijn code. Had dat trouwens op GoT gevonden.
De lesgever vond het maar niks. Zijn methode - een volledige functie van een half scherm - was the way to do it en niets anders.
Die gast heeft zwaar aan mijn punten gezeten hierdoor. Heb daarna een afkeer gekregen van VB....
Pagina: 1