Numeri in Lettere

di il
12 risposte

Numeri in Lettere

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

  • Re: Numeri in Lettere

    Integrare il codice trovato
  • Re: Numeri in Lettere

    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.
  • Re: Numeri in Lettere

    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."
  • Re: Numeri 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?
  • Re: Numeri in Lettere

    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.
  • Re: Numeri in Lettere

    Ho modificato Valore = Replace(Valore, ".", "") in Valore = Replace(Valore, ",", "") e questo è un passo in avanti ma mi riconsoce su 2,55 duecentocinquantacinque
  • Re: Numeri in Lettere

    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.
  • Re: Numeri in Lettere

    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.
  • Re: Numeri in Lettere

    Quindi devo modificare solo questo?
    Replace(Valore, ",", "")
    Se si come?
  • Re: Numeri in Lettere

    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.
  • Re: Numeri in Lettere

    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
  • Re: Numeri in Lettere

    alessandro.vitale ha scritto:


    A trovarla la guida....
    https://support.office.com/it-it/article/funzioni-ordinate-per-categoria-b8b136c3-2716-4d39-94a2-658ce330ed83
Devi accedere o registrarti per scrivere nel forum
12 risposte