Formato cella in VBA



  • Formato cella in VBA
    di kipudda (utente non iscritto) data: 24/03/2015 20:38:18

    Ciao a tutti,

    Sul mio file excel ho inserito due colonne in cui riportare, nella prima, le date di ricevimento delle bollette luce gas ecc. e, nell’altra, il relativo importo; con le tabelle Pivot, infine, elaboro i vari totali distinti per tipologia.

    Mi sono accorto però che, se per errore, in una delle celle relative agli importi pagati (dove ho inserito il formato contabilità, con due zeri dopo la virgola e con il separazione delle migliaia) inserisco la data di versamento (quindi con le barre separatrici “/”, tipo “10/01/2015”), il programma automaticamente mi converte il formato da “contabilità” a “data”.

    E’ possibile, secondo voi, impostare un comando da VBA per bloccare il formato della cella in “contabilità” evitando che il programma, nel caso prospettato (cioè laddove per errore venga inserita una data invece di un importo), lo modifichi in maniera automatica? Io ho provato con il comando che vi invio in allegato ma senza successo:

    Mi potete dare una mano ad impostare correttamente il comando da VBA (sempre che sia possibile impostare un comando di questo genere)? Così eviterei di dover ogni volta correggere manualmente il formato della cella.

    Grazie mille!!


     
    Private Sub Worksheet_Change (ByVal Target As Range)
    If Range(“A10”) > 0 And Range(“A10”).NumberFormat = “mm/dd/yyyy” Then
    Range(“A10”).NumberFormat = “#,##0.00”
    End If
    End Sub



  • di Vecchio Frac data: 24/03/2015 21:06:59

    Secondo te perchè la macro, come l'hai scritta, non funziona? cosa ti aspettavi che facesse? rileggendola, cosa fa invece? devi ragionare come fa il compilatore, non seguendo la logica che hai in mente tu. Ripercorri passo passo ogni istruzione e ti accorgerai facilmente del problema (non è un errore di sintassi, ma di logica).





  • di Vecchio Frac data: 25/03/2015 08:22:54

    Il giorno prima avevi iniziato una discussione identica (pur con oggetto diverso).
    Perchè non hai proseguito quella invece di iniziarne una nuova?
    In questo modo si crea soltanto confusione perchè si rischia di ricevere riposte in due filoni diversi, difficili da seguire poi.
    Quando non ricevete risposte, e può accadere, non siate impazienti e piuttosto risollevate la discussione con una nuova risposta in cui riportate all'attenzione la questione.





  • di Mister_x (utente non iscritto) data: 25/03/2015 09:47:55

    ciao

    aspettavo che qualchuno ti rispondesse, ma ho visto adesso che VF ti a fatto notare che hai postato due volte la stessa richiesta,
    il mio intervento si basa solamente sull'impostazione del formato della cella e l'utilizzo di VBA
    Perche' in questo caso ricorrere a VBA qundo con la semplice formattazione della cella si puo fare ????

    formato cella
    personalizzato
    "€" #.###.##0,00

    ciao





  • di kipudda (utente non iscritto) data: 25/03/2015 17:09:56

    Ciao a tutti. Ho provato subito con vba perché mi sembrava l'unica strada percorribile. Ho provato anche a rivedere l'istruzione che avevo postato, ma senza successo. Provo anche con l'ultima soluzione che mi avete suggerito. Vediamo un pò!



  • di Vecchio Frac data: 25/03/2015 18:25:20

    Perchè "senza successo"?
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        Application.EnableEvents = False
        If Target > 0 And IsDate(Target) Then
            Target.NumberFormat = "#,##0.00"
        End If
        Application.EnableEvents = True
    End Sub
    






  • di kipudda (utente non iscritto) data: 27/03/2015 05:34:17

    Grazie per il suggerimento, Vecchio Frac. Purtroppo però l’istruzione che mi hai postato non mi gira correttamente. Ho provato con i vari tentativi (qui allegati) ma non c’è stato niente da fare. Se nella cella H6 inserisco per errore un valore sottoforma di data, Excel mi modifica in automatico il formato della cella da “contabilità” a “data”, e se, successivamente, provo ad inserire altri valori in forma di numero contabile, automaticamente vengono tramutati sotto forma di data.
    Scusate se vi rompo le scatole, ma non so che fare!!

     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Target.Range("H6") > 0 And IsDate(Target.Range("H6")) Then
    Range("H6").NumberFormat = "#,##0.00"
    End If
    Application.EnableEvents = True
    
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Target.Range("H6") > 0 And IsDate(Target.Range("H6")) Then
    Target.Range("H6").NumberFormat = "#,##0.00"
    End If
    Application.EnableEvents = True
    
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Target.Range("H6") > 0 And IsDate(Target.Range("H6")) Then
    Target.NumberFormat = "#,##0.00"
    End If
    Application.EnableEvents = True
    
    



  • di kipudda (utente non iscritto) data: 27/03/2015 05:38:45

    Forse sarebbe più facile trovare un'istruzione che mi "blocchi" il formato della cella (per esempio in contabilità)
    permettendomi comunque di inserire nella cella i valori desiderati? Non credo che un'operazione di questo genere sia possibile impostando l'opzione "proteggi" dalla proprietà della cella (che mi bloccherebbe invece
    qualsiasi tipo di modifica sulla cella).



  • di kipudda (utente non iscritto) data: 27/03/2015 17:09:14

    nessuno riesce a darmi una mano!?!



  • di Marius44 data: 09/04/2015 16:06:08

    Prova a postare quanto sottoindicato nell'evento change di worksheet. Se immetti nella cella C3 qualcosa che non è un numero, il tutto viene cancellato. La cella accetta SOLO numeri.
    Potevi riuscirci da solo usando il registratore.
    Fammi sapere.
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        r = Target.Row: c = Target.Column
        If r = 3 And c = 3 Then
            If ActiveCell.NumberFormat <> "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)" Then
                ActiveCell.NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
                ActiveCell.ClearContents
            End If
        End If
    End Sub