Numeri in Lettere

di alessandro.vitale il
12 risposte
Buonasera,
ho un report dove ho degli importi che mi provengono da una query sotto il report.
Dentro il report vorrei una casella che mi replicasse l'importo presente in un determinato campo in lettere.
Ho trovato qualche VBA ma non ho saputo integrarlo bene.
cosa devo fare?

12 Risposte

  • Integrare il codice trovato
  • Nemmeno noi riusciamo ad integrarlo bene... nemmeno lo vediamo...
    Poi devi abituarti a fare le tue prove ed eventualmente documentare le anomalie descrivendo le prove fatte e gli errori ottenuti.
    Solo in questo caso riceverai supporto.
  • Allora.
    Questo è il codice che ho trovato e dicono crea un modulo dove copi questa funzione :
    Function NumeriPerLettere(Valore) As String
    
    Valore = Replace(Valore, ".", "")
    
    Dim Sez()
    
    Unita = ""
    Decine = ""
    Centinaia = ""
    Uni = ""
    Dec = ""
    Cent = ""
    Sezioni = ""
    NoUnits = 0
    
    Cifre = Len(Valore)
    
    Stringa = ""
    
    P = 0
        
    For Posizione = 1 To Cifre
        P = P + 1
        Stringa = Mid(Valore, Cifre - (Posizione - 1), 1) & Stringa
        If P = 3 Then
            Stringa = "\" & Stringa: P = 0
        End If
    Next
    
    If Left(Stringa, 1) = "\" Then Stringa = Mid(Stringa, 2, Len(Stringa))
    
    Sezioni = Empty
    Sezioni = Split(Stringa, "\")
    
    Nsez = UBound(Sezioni) + 1
    
    Erase Sez()
    ReDim Sez(Nsez)
    
    For S = 0 To Nsez - 1
    
        If Len(Sezioni(S)) < 3 Then Sezioni(S) = String(3 - Len(Sezioni(S)), "0") & Sezioni(S)
        
        If Len(Sezioni(S)) = 3 Then
            Centinaia = Mid(Sezioni(S), 1, 1)
            
            Select Case Centinaia
            
            Case "0"
                Cent = ""
            Case "1"
                Cent = "cento"
            Case Else
                Cent = Converti(Centinaia) & "cento"
            End Select
           
            Decine = Mid(Sezioni(S), 2, 1)
            
            Select Case Decine
            
                Case "0"
                    Dec = ""
                    NoUnits = 0
                
                Case "1"
                    Dec = Converti(Decine & Mid(Sezioni(S), 3, 1))
                    NoUnits = 1
                    Unita = ""
                
                Case Else
                    Dec = Converti(Decine & "0")
                    NoUnits = 0
                
            End Select
                         
            If NoUnits <> 1 Then
                Unita = Mid(Sezioni(S), 3, 1)
                Uni = Converti(Unita)
                If (Unita = "1" Or Unita = "8") And Dec <> "" Then Dec = Mid(Dec, 1, Len(Dec) - 1)
            End If
        End If
        
        Sez(S) = Cent & Dec & Uni
        Cent = "": Dec = "": Uni = ""
    
    Next
    
    Finale = ""
    
    For X = 0 To Nsez - 1
    
        Select Case Nsez - (X + 1)
        
            Case 0
                interp = ""
            
            Case 1
                If Sez(X) = "uno" Then
                    Sez(X) = ""
                    interp = "mille"
                Else
                    interp = "mila"
                End If
                
            Case 2
                If Sez(X) = "uno" Then
                    Sez(X) = "un"
                    interp = "milione"
                Else
                    interp = "milioni"
                End If
                
            Case 3
                If Sez(X) = "uno" Then
                    Sez(X) = "un"
                    interp = "miliardo"
                Else
                    interp = "miliardi"
                End If
        
        End Select
        
        Finale = Finale & Sez(X) & interp
    
    Next
    
    NumeriPerLettere = Finale
    
    End Function
    
    
    Function Converti(Numero)
    
    If Numero = "1" Then Stringa = "uno"
    If Numero = "2" Then Stringa = "due"
    If Numero = "3" Then Stringa = "tre"
    If Numero = "4" Then Stringa = "quattro"
    If Numero = "5" Then Stringa = "cinque"
    If Numero = "6" Then Stringa = "sei"
    If Numero = "7" Then Stringa = "sette"
    If Numero = "8" Then Stringa = "otto"
    If Numero = "9" Then Stringa = "nove"
    If Numero = "10" Then Stringa = "dieci"
    If Numero = "11" Then Stringa = "undici"
    If Numero = "12" Then Stringa = "dodici"
    If Numero = "13" Then Stringa = "tredici"
    If Numero = "14" Then Stringa = "quattordici"
    If Numero = "15" Then Stringa = "quindici"
    If Numero = "16" Then Stringa = "sedici"
    If Numero = "17" Then Stringa = "diciassette"
    If Numero = "18" Then Stringa = "diciotto"
    If Numero = "19" Then Stringa = "diciannove"
    If Numero = "20" Then Stringa = "venti"
    
    If Numero = "30" Then Stringa = "trenta"
    If Numero = "40" Then Stringa = "quaranta"
    If Numero = "50" Then Stringa = "cinquanta"
    If Numero = "60" Then Stringa = "sessanta"
    If Numero = "70" Then Stringa = "settanta"
    If Numero = "80" Then Stringa = "ottanta"
    If Numero = "90" Then Stringa = "novanta"
    If Numero = "100" Then Stringa = "cento"
    
    Converti = Stringa
    
    End Function
    Viene scritto poi..:

    "ora nelle query puoi utilizzare una nuova funzione
    NumeriPerLettere

    ti basta scrivere =NumeriPerLettere(numero) e la funzione ti restituisce il numero in lettere."
  • Io ho creato il modulo correttamente senza modificarlo.
    E ORA MI FUNZIONA ma in parte.
    Non mi riconosce la virgola. Quindi se scrivo 2,55 mi restituisce duecentocinquantacinque
    questo è da sistemare ma non saprei dove mettere le mani in quel codice… e poi vorrei che ad esempio un numero 100,01 me lo desse= cento/01

    cosa devo modificare di questo vba?
  • Passa alla funzione solo la parte intera del numero e trasforma la parte decimale in stringa.
    Poi unisci le due stringhe interponendo un "/" tra le due stringhe.
  • Ho modificato Valore = Replace(Valore, ".", "") in Valore = Replace(Valore, ",", "") e questo è un passo in avanti ma mi riconsoce su 2,55 duecentocinquantacinque
  • oregon ha scritto:


    Passa alla funzione solo la parte intera del numero e trasforma la parte decimale in stringa.
    Poi unisci le due stringhe interponendo un "/" tra le due stringhe.
    non saprei come tradurre questo che hai detto in una modifica del codice vba.
  • oregon ha scritto:


    Passa alla funzione solo la parte intera del numero e trasforma la parte decimale in stringa.
    Poi unisci le due stringhe interponendo un "/" tra le due stringhe.
  • Quindi devo modificare solo questo?
    Replace(Valore, ",", "")
    Se si come?
  • alessandro.vitale ha scritto:


    Quindi devo modificare solo questo?
    Replace(Valore, ",", "")
    Se si come?
    Prendendo solo la parte intera.
    Prova a cercare nella guida le funzioni per manipolare i numeri e fai qualche tests.
  • A trovarla la guida.... Anche se comunque il codice chebho postato é troppo complesso x capire da una guida cosa andare a modificare e cosa eventualmente aggiungere..... Almeno ditemi quale stringa devo modificare e poi.... Dove trovo la guida
Devi accedere o registrarti per scrivere nel forum
12 risposte