Bardzo często przy imporcie czy linkowaniu plików txt w Accessie mamy problem z niepolskimi separatorami w kwotach np 1,000.00. Z niewiadomych przyczyn Excel ma narzędzie do prawidłowego rozpoznawania separatora tysięcy a Access nie. Stąd w Accessie musimy w specyfikacji importu/łącza ustawić taką kolumnę jako tekstową a następnie przerobić w niej separatory np przy pomocy poniższej funkcji (powinna być wgrana do modułu publicznego aby można jej używać w dowolnej kwerendzie):
Function KwotaUSA2PL(KwotaUSA As String) As Currency Dim NrZnaku As Long Dim Znak As String Dim t As String Dim txtKwota As String t = Trim(KwotaUSA) For NrZnaku = 1 To Len(t) Znak = Mid(t, NrZnaku, 1) If Znak = "." Then txtKwota = txtKwota & "," Else If Znak <> "," Then txtKwota = txtKwota & Znak End If End If Next KwotaUSA2PL = CCur(txtKwota) End Function |
W komentarzach pojawiła się ciekawa dyskusja, jak tą funkcję zastąpić wyrażeniem z użyciem funkcji Replace
Witam,
czy nie jest prościej zastosować funkcję Replace?
Zamiast pętli For i jednego warunku If otrzymujemy jedną linię tekstu.
[cc lang=”vb”]
t = CCur(Trim(Replace(t, „.”, „,”)))
[/cc]
niestety nie, ponieważ to wyrażenie nie usuwa przecinków, które są separatorami tysięcy w kwotach USA
Czyli kwotę „1,200.50” zamieni na „1,200,50” co dalej jest nieprawidłowe
Ale idąc dalej tym tropem można zagnieździć Replace w Replace i faktycznie mamy wtedy 1 linię kodu, lub wyrażenie do zastosowania w kwerendzie:
[cc lang=”vb”]
CCur(Replace(Replace(Trim(t), „,”, „”),”.”,”,”))
[/cc]