Newsgroup: it.comp.appl.access
Titolo: cifra in lettere

Salve a tutti e complimenti al newsgroup.
Ho 1 problema: da access dopo varie elaborazioni creo dei report dove scrivo
dei totali in euro.
Esempio:
? 22,00
? 99,87
? 33,97
etc..
come faccio ad ottenere la cifra in lettere?
ventidue/00
novantanove/87
trentatre/97
Ho provato a utilizzare una routine presente sul sito comune chiamata
Cur2StrEuro che conteneva il seguente modulo:
Option Compare Database
Option Explicit
Const langItalian = 1
Const langEnglish = 2
Const langFrench = 3
Const langGerman = 4
Private Function LongCur2Str(ByVal cValue As Currency, ByRef sCaseValue As
String, Optional ByVal Language As Byte) As Long
    Const MAXLEN = 12 'DON'T CHANGE!
    Dim StartValue As String, _
        strValue As String, _
        strResult As String
    Dim n100 As Integer ' x00
    Dim n10 As Integer  ' 0x0
    Dim n1 As Integer   ' 00x
    Dim i As Integer ' Counter in For..Next loop.
    Dim sNumberStrings As Variant
    If IsEmpty(Language) Then Language = langItalian
    Select Case Language
        Case langItalian
            sNumberStrings = Array _
            ("Zero", "Uno", "Due", "Tre", "Quattro", "Cinque", "Sei",
"Sette", "Otto", "Nove", _
            "Dieci", "Undici", "Dodici", "Tredici", "Quattordici",
"Quindici", "Sedici", "Diciassette", "Diciotto", "Diciannove", _
            "Venti", "Trenta", "Quaranta", "Cinquanta", "Sessanta",
"Settanta", "Ottanta", "Novanta", _
            "Cento", "Duecento", "Trecento", "Quattrocento", "Cinquecento",
"Seicento", "Settecento", "Ottocento", "Novecento", _
            "Mille", "Mila", "UnMilione", "Milioni", "UnMiliardo",
"Miliardi", "** Valore non calcolabile **")
        Case langEnglish
            sNumberStrings = Array _
            ("Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven",
"Eight", "Nine", _
            "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen",
"Sixteen", "Seventeen", "Eighteen", "Nineteen", _
            "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy",
"Eighty", "Ninety", _
            "Onehundred", "Twohundred", "Threehundred", "Fourhundred",
"Fivehundred", "Sixhundred", "Sevenhundred", "Eighthundred", "Ninehundred",
_
            "Onethousand", "Thousand", "OneMillion", "Millions",
"OneBillion", "Billions", "** Value not calculable **")
        Case langFrench
            sNumberStrings = Array _
            ("Zero", "Un", "Deux", "Trois", "Quatre", "Cinq", "Six", "Sept",
"Huit", "Neuf", _
            "Dix", "Onze", "Douze", "Treize", "Quatorze", "Quinze", "Seize",
"Dixsept", "Dixhuit", "Dixneuf", _
            "Vingt", "Trente", "Quarante", "Cinquante", "Soixante",
"Soixantedix", "Quatrevingts", "Quatrevingtdix", _
            "Cent", "Deuxcents", "Troiscents", "Quatrecents", "Cinqcents",
"Sixcents", "Septcents", "Huitcents", "Neufcents", _
            "Mille", "Mille", "UnMillion", "Million", "UnMilliard",
"Milliard", "** Valeur pas calculable **")
        Case langGerman
            sNumberStrings = Array _
            ("Null", "Ein", "Zwei", "Drei", "Vier", "Fünf", "Sechs",
"Sieben", "Acht", "Neun", _
            "Zehn", "Elf", "Zwölf", "Dreizehn", "Vierzehn", "Fünfzehn",
"Sechzehn", "Siebzehn", "Achtzehn", "Neunzehn", _
            "Zwanzig", "Dreißig", "Vierzig", "Fünfzig", "Sechzig",
"Siebzig", "Achtzig", "Neunzig", _
            "Hundert", "Zweihundert", "Dreihundert", "Vierhundert",
"Fünfhundert", "Sechshundert", "Siebenhundert", "Achthundert",
"Neunhundert", _
            "Tausend", "Tausend", "EineMillion", "Millionen",
"EineMilliarde", "Milliarden", "** Unberechenbarer Wert **")
    End Select
    ' Controlli iniziali
    ' (gestisce fino a 999.999.999.999)
    If cValue > 999999999999# Then
        sCaseValue = sNumberStrings(43)
        LongCur2Str = 1 'OwerflowError
        Exit Function
    End If
    If cValue = 0 Then
        sCaseValue = sNumberStrings(0)
        LongCur2Str = 0
        Exit Function
    End If
    StartValue = Format(cValue, String(MAXLEN, "0"))
    strResult = ""
    ' Inizio conversione
    For i = 1 To (MAXLEN \ 3)
        strValue = Mid$(StartValue, i * 3 - 2, 3)
        n100 = Val(Mid$(strValue, 1, 1))
        n10 = Val(Mid$(strValue, 2, 1))
        n1 = Val(Mid$(strValue, 3, 1))
        ' ----- Centinaia
        If (n100 > 0) Then strResult = strResult & sNumberStrings(n100 + 27)
        ' ----- Decine e Unita'
        ' Tratta in modo differente i numeri [1..9], [10..19], [20..99].
        If (n10 = 0) Then '[1..9]
            If (n1 > 0) Then strResult = strResult & sNumberStrings(n1)
        ElseIf (n10 = 1) Then '[10..19]
            strResult = strResult & sNumberStrings(10 + n1)
        Else 'If (n10 > 1) Then '[20..99]
            If ((Language = langGerman) And (n1 <> 0)) Then
                ' TEDESCO: un numero compreso tra 21 e 99 non terminante con
                ' 0, si scrive prima il numero che indica le unità, poi
"und" ("e" in
                ' tedesco) e poi il numero che indica le decine, tutto
attaccato
                strResult = strResult & sNumberStrings(n1) & "Und" &
sNumberStrings(n10 + 18)
            Else
                strResult = strResult & sNumberStrings(n10 + 18)
                ' ITALIANO: correzione per decine con unita' = 1 o 8;
                ' troncamento dell'ultima vocale delle decine: VentiUno ->
VentUno
                If (Language = langItalian) Then
                    If ((n1 = 1) Or (n1 = 8)) Then strResult =
Left(strResult, Len(strResult) - 1)
                End If
                ' ----- Unita' (solo se le decine<>10)
                If ((n1 > 0) And (n10 <> 1)) Then strResult = strResult &
sNumberStrings(n1)
            End If
        End If
        ' Ultimi aggiustamenti
        ' Aggiunge Miliardi, Milioni e Mila (oppure 1Miliardo, 1Milione,
Mille).
        If (i < 4) Then
            If (strValue = "001") Then ' 1000
                strResult = Left(strResult, Len(strResult) -
Len(sNumberStrings(1)))
                strResult = strResult & sNumberStrings(44 - (i * 2) - 1)
            ElseIf (strValue <> "000") Then ' x000
                strResult = strResult & sNumberStrings(44 - (i * 2))
            End If
        End If
    Next
    ' TEDESCO: se l'ultima cifra e' 1, si scrive Eins, non Ein.
    If (Language = langGerman) Then
        If (Right(strResult, 3) = sNumberStrings(1)) Then strResult =
strResult & "s"
    End If
    sCaseValue = strResult
    LongCur2Str = 0
End Function
Public Function EuroCheque(ByVal vValue As Variant, ByRef sNumberValue As
String, ByRef sCaseValue As String, Optional ByVal Language As Byte) As Long
    On Error GoTo EuroChequeError
    Dim sTempCaseValue As String
    'Controlli su vValue
    If IsNull(vValue) Then GoTo EuroChequeError
    If vValue = vbNullString Then GoTo EuroChequeError
    If Not IsNumeric(vValue) Then GoTo EuroChequeError
    If LongCur2Str(CCur(Int(vValue)), sTempCaseValue, Language) Then GoTo
EuroChequeError
    sCaseValue = StrConv(sTempCaseValue & "/" & Right$(Format$(vValue,
".00"), 2), vbProperCase)
    sNumberValue = Format$(vValue, "#,##0.00")
    Exit Function
EuroChequeError:
    sNumberValue = "Error"
    sCaseValue = "Error"
    EuroCheque = 1
End Function
Torando a noi il problema è che non lo so utilizzare cioè se provo a fare la
conversione cifra/lettere nel report: access si pianta;
allora ho provato a inserirlo nella form che mi calcola i totali da inserire
nel report ma ho maschere continue e quindi il valore calcolato per 1
maschera me lo ripropone nella stessa casella su tutte le altre.
Spero di essere stato chiaro.
Grazie anticipatamente a chi saprà illuminarmi.

 ha scritto nel messaggio
news:Af7j8.1364$1S3....@twister1.libero.it...

Io adesso la funzione non l'ho provata ma, se funziona, penso basti che tu
inserisca il risultato della funzione nella query di origine o della
maschera o del report.
Ciao

 wrote in message
kk7j8.1411$1S3....@twister1.libero.it...


Allora, vediamo se riesco a spiegarti.
Mettiamo caso che uno dei campi della query sia numero (dove c'è il valore
in cifra)
in struttura query nel campo successivo scrivi: cifra:
nomefunzione(par1;par2;par3 ecc. ecc.) dove cifra è il nome che darai al
campo risultato e par1 (parametro uno) ci metti [numero] e, separati da un
punto e virgola gli altri parametri richiesti (se ci sono).
Spero di essere stato abbastanza chiaro.

 maschera o del report.
Questo dimostra che nessuno si e' preso il disturbo di spulciarsi tutta 
quella roba (E quindi non valeva certo la pena quotarla tutta).
Se l'avessi provata ti saresti accorto che non restituisce una stringa, 
ma un codice di errore... la stringa te la ritrovi in una delle 
variabili passate per riferimento (e non credo che si possa usare cosi' 
nelle query)


 quella roba (E quindi non valeva certo la pena quotarla tutta).
scusa non sapevo di queste regole.
grazie per il consiglio ora funziona tutto a meraviglia.
max.