Format che funziona male



  • Format che funziona male
    di marinoernestoch data: 05/06/2016 23:09:36

    Buona sera.
    Non riesco a capire perchè il format sotto funziona male: più precisamente mi tronca le migliaia.
    Non è questione di format base italiano/americano, perchè la successiva format, che visualizza anche i decimali, funziona bene.

    Sono ore che mi scervello, non venendo a capo di nulla.
    Dove sbaglio?
    grazie
     
    Sub formato()
    Dim pippo As Single, casa$
        pippo = 1234
        casa = Format(pippo, "###,###;;===")
        ActiveCell.Offset(1, 0).Value = casa
        ActiveCell.Offset(2, 0).Value = Format(pippo, "###,###;;===")
        casa = Format(pippo, "###,###;;#")
        ActiveCell.Offset(3, 0).Value = casa
        ActiveCell.Offset(4, 0).Value = Format(pippo, "###,###;;#")
        ActiveCell.Offset(5, 0).Value = Format(pippo, "###,###.00;;#")     ' <<<< solo questa da il risultato esatto
    End Sub
    



  • di Marius44 data: 06/06/2016 08:05:40

    Ciao Marino
    prova la seguente:
    in una cella qualsiasi del tuo foglio di lavoro definisci in nome definito "numero" come "#.##0,00"
    quindi aggiungi alla tua macro, prima di End Sub, le righe che vedi sotto e fai delle prove.
    Per renderti conto meglio prova a cambiare il punto con la virgola nel nome definito ed anche nelle impostazioni avanzate di Excel.
    Vedi se ne vieni a capo.

    Fai sapere. Ciao,
    mario

     
    Dim cifre As String
    cifre = Sheets(1).Range("numero")
    ActiveCell.Offset(7, 0).Value = FormatNumber(pippo, 2, , , -1)
    ActiveCell.Offset(8, 0).Value = Format(pippo, cifre)



  • di marinoernestoch data: 06/06/2016 20:30:30

    Ti ringrazio Marius44 del suggerimento ma non mi ha portato a nulla.
    Anzi, definendo un campo stringa (cifre), caricandolo dalla cella e poi scaricandolo in un'altra, perde i decimali presenti.
    Piuttosto, continuando nelle prove, ho trovato la soluzione: assegnare il formato numerico alla cella e poi caricargli l'importo senza format.
     
    Sub formato()
    Dim pippo As Single, casa$
    Dim cifre As String
    
        pippo = 1234.56
        cifre = ActiveCell.Value
       
        ActiveCell.Offset(2, 0).Value = Format(pippo, "###,###;;===") '<< errore
        casa = Format(pippo, "###,###;;#")                           '<< errore
        ActiveCell.Offset(3, 0).Value = casa                         '<< errore
        
        ActiveCell.Offset(4, 0).NumberFormat = "###,###;;#"        '<<  ESATTO
        ActiveCell.Offset(4, 0).Value = pippo                      '<<  ESATTO
        
        ActiveCell.Offset(5, 0).NumberFormat = "###,###.00;;#"     '<<  ESATTO
        ActiveCell.Offset(5, 0).Value = pippo                      '<<  ESATTO
        
        
    
    End Sub
    



  • di Raffaele_53 data: 07/06/2016 02:05:07

    >>>perde i decimali presenti.
    Prova ....Dim pippo As Double



  • di marinoernestoch data: 07/06/2016 09:45:32

    Ti ringrazio Raffaele_53, ma l'errore non era da ricercare nella definizione del campo (single o double, entrambi gestiscono i decimali), ma nella sua rappresentazione. Tant'è che avevo l'errore anche con cifre piene, senza decimali!. L'errore era che trasformavo in memoria con un format la cifra in una variabile stringa (e nella variabile risultava corretta) per poi scaricarla su una cella. La soluzione è stata quella di assegnare alla cella il formato desiderato con il ".numberformat" e poi scaricare la variabile numerica nella cella, come ho scritto nella risposta che ho dato a Marius44.
    By