'''''''''''''''''''''''''''''''''''' ' Jerzy Gebler ' ' http:\\ocelot.com.pl ' '''''''''''''''''''''''''''''''''''' ' 14/09/1996 - C base version ' ' 02/03/2001 - VBA translation ' ' 07/07/2003 - english translation ' ' 16/09/2005 - small algorithm fix ' '''''''''''''''''''''''''''''''''''' Option Compare Binary Option Explicit '''''''''''''''''''''''''''''''''''' ' 'Function Slownie (ByVal l As Long, Optional ByVal skroty As Boolean = False, Optional ByVal Polish As Boolean = True) As String 'Function SlownieKwota (ByVal l As Currency, Optional ByVal skroty As Boolean = False, Optional Polish As Boolean = True, Optional ByVal Waluta As String = "") As String ' 'Function LMod (ByVal n1, ByVal n2) As Currency ' Private JEDNOSTKI(0 To 9) As String Private NASCIE(0 To 9) As String Private DZIESIATKI(0 To 9) As String Private SETKI(0 To 9) As String Private ZLOTY(-1 To 4) As String Private GROSZY(-1 To 4) As String Private TYSIAC(-1 To 4) As String Private MILION(-1 To 4) As String Private MILIARD(-1 To 4) As String Private BILION(-1 To 4) As String Private slownie_buff As String ' bufor tekstowy Private koncowka As Integer ' rodzaj końcówki tekstu Function LMod(ByVal n1, ByVal n2) As Currency On Error Resume Next LMod = 0 n1 = n1 n2 = n2 If n2 = 0 Then Exit Function While n1 >= n2 n1 = n1 - n2 If err <> 0 Then err = 0 Exit Function End If Wend LMod = n1 End Function Private Function rozbij_tysiac(tysiac_val As Currency) On Error Resume Next Dim S As String Dim i As Currency Dim t As Currency: t = tysiac_val S = "" koncowka = 3 i = Int(t / 100) t = LMod(t, 100) S = SETKI(i) i = Int(t / 10) t = LMod(t, 10) If i <> 1 Then S = S & DZIESIATKI(i) S = S & JEDNOSTKI(t) Select Case t Case 1: If tysiac_val = 1 Then koncowka = 1 ' inna końcówka dla 1 Case 2, 3, 4: koncowka = 2 End Select Else S = S & NASCIE(t) End If rozbij_tysiac = S End Function Function Slownie(ByVal l As Long, Optional ByVal skroty As Boolean = False, Optional ByVal Polish As Boolean = True) As String If Polish Then slownie_init_PL Else slownie_init_EN Dim S As String Dim i As Currency S = "" koncowka = 3 If l < 0 Then S = S & "minus ": l = -l End If If l = 0 Then S = "zero " End If 'zaokrągla podczas rzutowania na Currency i = Int(l / 1000000000000@) If i <> 0 Then S = S & rozbij_tysiac(i) If skroty = True Then S = S & BILION(-1) Else S = S & BILION(koncowka) koncowka = 3 End If End If l = LMod(l, 1000000000000@) i = Int(l / 1000000000@) If i <> 0 Then S = S & rozbij_tysiac(i) If skroty = True Then S = S & MILIARD(-1) Else S = S & MILIARD(koncowka) koncowka = 3 End If End If l = LMod(l, 1000000000@) i = Int(l / 1000000@) If i <> 0 Then S = S & rozbij_tysiac(i) If skroty = True Then S = S & MILION(-1) Else S = S & MILION(koncowka) koncowka = 3 End If End If l = LMod(l, 1000000@) i = Int(l / 1000@) If i <> 0 Then S = S & rozbij_tysiac(i) If skroty = True Then S = S & TYSIAC(-1) Else S = S & TYSIAC(koncowka) koncowka = 3 End If End If l = LMod(l, 1000@) i = Int(l / 1@) If i <> 0 Then S = S & rozbij_tysiac(i) End If Slownie = S End Function Private Sub slownie_init_PL() JEDNOSTKI(0) = "" JEDNOSTKI(1) = "jeden " JEDNOSTKI(2) = "dwa " JEDNOSTKI(3) = "trzy " JEDNOSTKI(4) = "cztery " JEDNOSTKI(5) = "pięć " JEDNOSTKI(6) = "sześć " JEDNOSTKI(7) = "siedem " JEDNOSTKI(8) = "osiem " JEDNOSTKI(9) = "dziewięć " NASCIE(0) = "dziesięć " NASCIE(1) = "jedenaście " NASCIE(2) = "dwanaście " NASCIE(3) = "trzynaście " NASCIE(4) = "czternaście " NASCIE(5) = "piętnaście " NASCIE(6) = "szesnaście " NASCIE(7) = "siedemnaście " NASCIE(8) = "osiemnaście " NASCIE(9) = "dziewiętnaście " DZIESIATKI(0) = "" DZIESIATKI(1) = "" DZIESIATKI(2) = "dwadzieścia " DZIESIATKI(3) = "trzydzieści " DZIESIATKI(4) = "czterdzieści " DZIESIATKI(5) = "pięćdziesiąt " DZIESIATKI(6) = "sześćdziesiąt " DZIESIATKI(7) = "siedemdziesiąt " DZIESIATKI(8) = "osiemdziesiąt " DZIESIATKI(9) = "dziewięćdziesiąt " SETKI(0) = "" SETKI(1) = "sto " SETKI(2) = "dwieście " SETKI(3) = "trzysta " SETKI(4) = "czterysta " SETKI(5) = "pięćset " SETKI(6) = "sześćset " SETKI(7) = "siedemset " SETKI(8) = "osiemset " SETKI(9) = "dziewięćset " ZLOTY(-1) = "zł. " ZLOTY(0) = "złoty" ZLOTY(1) = "złoty i " ZLOTY(2) = "złote i " ZLOTY(3) = "złotych i " GROSZY(-1) = "gr. " GROSZY(0) = "grosz" GROSZY(1) = "grosz " GROSZY(2) = "grosze " GROSZY(3) = "groszy " TYSIAC(-1) = "tys. " TYSIAC(0) = "tysiąc" TYSIAC(1) = "tysiąc " TYSIAC(2) = "tysiące " TYSIAC(3) = "tysięcy " MILION(-1) = "mln. " MILION(0) = "milion" MILION(1) = "milion " MILION(2) = "miliony " MILION(3) = "milionów " MILIARD(-1) = "mld. " MILIARD(0) = "miliard" MILIARD(1) = "miliard " MILIARD(2) = "miliardy " MILIARD(3) = "miliardów " BILION(0) = "bln. " BILION(0) = "bilion" BILION(1) = "bilion " BILION(2) = "biliony " BILION(3) = "bilionów " End Sub Private Sub slownie_init_EN() JEDNOSTKI(0) = "" JEDNOSTKI(1) = "one " JEDNOSTKI(2) = "two " JEDNOSTKI(3) = "three " JEDNOSTKI(4) = "four " JEDNOSTKI(5) = "five " JEDNOSTKI(6) = "six " JEDNOSTKI(7) = "seven " JEDNOSTKI(8) = "eight " JEDNOSTKI(9) = "nine " NASCIE(0) = "ten " NASCIE(1) = "eleven " NASCIE(2) = "twelve " NASCIE(3) = "threeten " NASCIE(4) = "fourteen " NASCIE(5) = "fifteen " NASCIE(6) = "sixteen " NASCIE(7) = "seventeen " NASCIE(8) = "eighteen " NASCIE(9) = "nineteen " DZIESIATKI(0) = "" DZIESIATKI(1) = "" DZIESIATKI(2) = "twenty " DZIESIATKI(3) = "thirty " DZIESIATKI(4) = "fourty " DZIESIATKI(5) = "fifty " DZIESIATKI(6) = "sixty " DZIESIATKI(7) = "seventy " DZIESIATKI(8) = "eighty " DZIESIATKI(9) = "ninety " SETKI(0) = "" SETKI(1) = "one hundred " SETKI(2) = "two hundred " SETKI(3) = "three hundred " SETKI(4) = "four hyndred " SETKI(5) = "five hundred " SETKI(6) = "six hundred " SETKI(7) = "seven hundred " SETKI(8) = "eight hundred " SETKI(9) = "nine hundred " ZLOTY(-1) = "" ZLOTY(0) = "" ZLOTY(1) = " " ZLOTY(2) = " " ZLOTY(3) = " " GROSZY(-1) = "" GROSZY(0) = "" GROSZY(1) = " " GROSZY(2) = " " GROSZY(3) = " " TYSIAC(-1) = "thousand" TYSIAC(0) = "thousand" TYSIAC(1) = "thousand " TYSIAC(2) = "thousand " TYSIAC(3) = "thousand " MILION(-1) = "million" MILION(0) = "million" MILION(1) = "million " MILION(2) = "million " MILION(3) = "million " MILIARD(-1) = "milliard" MILIARD(0) = "milliard" MILIARD(1) = "milliard " MILIARD(2) = "milliard " MILIARD(3) = "milliard " BILION(-1) = "bilion" BILION(0) = "bilion" BILION(1) = "bilion " BILION(2) = "bilion " BILION(3) = "bilion " End Sub Function SlownieKwota(ByVal l As Currency, Optional ByVal skroty As Boolean = False, Optional Polish As Boolean = True, Optional ByVal Waluta As String = "") As String Dim S As String Dim zl As Currency Dim gr As Currency S = "" ' sklada tekst w calosc If l >= 0 Then l = Fix(l * 100 + 0.5) / 100 ' korekta - chcemy mieć pełne gosze - dla dodatnich w górę If l < 0 Then l = Fix(l * 100 - 0.5) / 100 ' korekta - chcemy mieć pełne gosze - dla ujemnych w dół zl = Fix(l) ' pełne złotówki gr = (l - zl) * 100@ ' pełne grosze If Polish And Waluta = "" Then If skroty = True Then S = S & Slownie(CDbl(zl), True, Polish) S = S & ZLOTY(-1) If zl <> 0 Then gr = Abs(gr) ' nie potrzebujemy drugi raz słowa minus S = S & Slownie(CDbl(gr), True, Polish) S = S & GROSZY(-1) Else S = S & Slownie(CDbl(zl), False, Polish) S = S & ZLOTY(koncowka) If zl <> 0 Then gr = Abs(gr) ' nie potrzebujemy drugi raz słowa minus S = S & Slownie(CDbl(gr), False, Polish) S = S & GROSZY(koncowka) End If Else S = S & Slownie(CDbl(zl), skroty, Polish) S = S & Waluta & IIf(Polish, " i ", " and ") S = S & Format(CDbl(gr), "00") & "/100" End If SlownieKwota = S End Function