› Sviluppare funzionalita su Microsoft Office con VBA › Problema con il formato celle
-
AutoreArticoli
-
Ciao a tutti,
ho un problema che non riesco a risolvere, ovvero: ho un file dove ho creato una Userform che mi inserisce su un foglio i dati che digito, tra cui dei numeri e delle date.
In pratica, vorrei che nelle celle dove vanno a finire questi dati, i numeri giungano già con la formattazione da me desiderata ovvero la data in formato gg/mm/aa ed in numeri in formato numero e non generale o testo.
Se formatto io una serie di celle nel formato che mi serve. salvo e poi chiudo il file, la formattazione da me scelta l'ho persa.
Come devo / posso fare per mantenerla per sempre ?
Grazie a chi vorrà rispondermi
Puoi allegare un file senza dati sensibili ma che riprende la stessa struttura? Tieni presente che tutto ciò che esce da una textbox si riversa sul foglio come Testo.
Ciao alexps81 e grazie per la disponibilità
Ecco il file che ho svuotato dei dati sensibili. Non ti funzionerà il menù a tendina della userform chamato "Mandato", perché ho dovuto cancellare ....
Grazie, sono nelle tue mani
Allegati:
You must be logged in to view attached files.Per la formattazione in formato gg/mm/aa potresti provare così:
ActiveCell.Value = DateValue(Format(TxtData, "dd/mm/yy"))mentre per il formato numerico intero prova così:
ActiveCell.Offset(0, 3).Value = TxtTelefono.Value ActiveCell.Offset(0, 3).NumberFormat = "0"Ciao e grazie mille per la risposta.
Queste stringhe, dove le posiziono all'interno del mio modulo ?
Prima di fare casini .... chiedo
GRAZIE !!!
Ciao non ho capito bene, tu crei la formattazione delle celle poi salvi ed alla nuova apertura del file hai perso la formattazione? Mi suona nuova 🤔
Se una cella è formattata come numero, tramite codice devi mandargli un numero altrettanto se formattata come data.
Segui i consigli di Alex, nel caso fai un cast del testo da inviare con Cint per convertirlo in intero e Cdate per la data.
Cmq a mio pare, il numero di telefono deve essere memorizzato come testo e non come numero, perché questo effettivamente non lo è (cioè non verrà usato per fare dei calcoli).
il numero di telefono deve essere memorizzato come testo
Aggiungo che attualmente io memorizzo anche le date come testo nei miei db. I formati data e ora sono sempre fonte di guai in qualsiasi sistema di database (anche se esiste il tipo datetime naturalmente e c'e' chi mi obietta sempre che se il tipo esiste, va utilizzato).
Ciao Boss
io non ho problemi con le date perché quando le prelevo dalla cella le dò in pasto ad una variabile tipizzata per poterci lavorare su, invece quando devo memorizzare in una cella faccio come sopra se il valore è prelevato da una textbox (altrimenti gli dò in pasto la variabile).Cmq ognuno ha il suo coding!!! L'importante è ottenere il risultato
Ciao non ho capito bene, tu crei la formattazione delle celle poi salvi ed alla nuova apertura del file hai perso la formattazione? Mi suona nuova
Ciao, si hai capito bene purtroppo !
Sembra inspiegabile, forse lo è, ma purtroppo mi succede questo.
Ripeto i passaggi: formatto celle (esempio: formato NUMERO), esito operazione ok, salvo, chiudo, riapro ..... come se non avessi fatto niente ! A te/voi che ci capite, l'ardua sentenza
Aspetta tra quello che hai scritto tu e quello che ho scritto io c'è una differenza, "esito operazione ok".
Questo vuol dire che fai girare la macro prima di chiudere, corretto!? Se fosse così sarebbe normale, se non fai il cast come ti abbiamo suggerito Alex ed io, ti spiego come lavora Excel dietro le quinte:
quando cambi la formattazione delle celle, poniamo in numero, praticamente stai dicendo ad Excel di considerare la stringa di caratteri inseriti da tastiera come un numero. Nel momento in cui premi invio o ti sposti di cella, Excel esegue direttamente il cast della stringa in numero (se possibile), invece quando assegni dei valori ad una cella tramite codice questo cast non avviene, tocca al programmatore forzarlo come ti è stato suggerito.
Spero di essere stato chiaro e che possa aiutarti questa mia lunga e tediosa spiegazione
Ti faccio un altro esempio:
hai mai provato a formattare una cella in decimale oppure in valuta!? Queste due formattazioni hanno in comune le cifre dopo la virgola, adesso poniamo il caso (lascia perdere per un momento la macro) che tu inserisca un numero intero, cosa avverrebbe??
Excel eseguirebbe direttamente il cast, quindi automaticamente aggiungerebbe la virgola e tanti zeri pari al numero di cifre decimali da te indicate, in più nel caso della valuta inserirebbe anche il simbolo
Aspetta tra quello che hai scritto tu e quello che ho scritto io c'è una differenza, "esito operazione ok".
chiedo scusa ma il problema mi si è ripresentato e non riesco a risolverlo.
Non so cosa sia un cast del testo nè tantomeno come si invii al clint
Allego file, ti darà un errore su una formula ma ignoralo, quello l'ho risolto. Prova a scrivere dalla userform e vedrai che quando trasferisci sul foglio, i numeri non sono convertiti in "numero", cosa che io vorrei in tutte le colonne che li contengo, con tanto di due decimali al seguito (esclusa colonna J).
Cosa devo scrivere per risolvere ?
Il problema ce l'ho nel formato numero e nel formato data
GRAZIE
Allegati:
You must be logged in to view attached files.Aggiungo che attualmente io memorizzo anche le date come testo nei miei db
immagino come "yyyymmdd" .....
chiedo scusa ma il problema mi si è ripresentato e non riesco a risolverlo
Ciao, diciamo che vedo che non hai seguito i suggerimenti che ti sono stati dati fin ora, utilizzando DateValue e NumberFormat
Da una textbox esce sempre e solo testo. Bisogna prima trasformare con CDbl(textbox) e poi eventualmente forzare la formattazione in cella con NumberFormat = "0" o NumberFormat = "0.00"
Comunque ho dato uno sguardo a questo tuo progetto e mi auguro che non sia destinato ad un utilizzo d'ufficio/lavoro perché ci sono diversi errori. Ad esempio com'è che gestisci il Contatore? Perché sei tu a dover inserire il codice a mano e non ci pensa lui a darti il primo numero disponibile? Poi tutte quelle CheckBox SI/NO non credo siano corrette. Penso che dovresti ricorrere agli OptionButton che ti consentono di scegliere o SI o NO e non entrambe le scelte. Poi ci vorrebbero dei controlli sulle date inserite: il formato anglosassone; l'anno bisestile; se scrivi veramente una data o stai scrivendo del testo; ecc...
Altri problemi sono che dovresti creare una convalida sulle textbox destinate ai numeri piuttosto che al testo. Se deve essere presente solo testo allora devi fare in modo che non ci sia possibilità di inserire numeri e/o viceversa. Poi, ancora, tutti quegli IF e ELSEIF per verificare se le textbox sono valorizzate o meno...basta un ciclo FOR e un ARRAY...poche righe di codice e ti spazzoli tutti i controlli.
Insomma sarebbe da migliorarlo un po'. Te lo dico come consiglio perché ci tengo che certi lavori vengano fatti bene
ciao
devi trasformare in numero
esempio
ActiveCell.Offset(0, 9).Value = CDbl(CboNumRate)
ciao,
grazie per la risposta ma ti garantisco che non li ho utilizzati perchè non so come utilizzarli.
Avrei bisogno, se possibile e per favore, che qualcuno mi scrivesse, sulla base del mio file allegato, il codice vba
grazie
ciao
basta che aggiungi alle colonne dove inserisci numeri
ActiveCell.Offset(0, 9).Value = CDbl(CboNumRate)
la parte in rosso
ciao
Ciao Gianfranco55, grazie mi hai risolto un bel problema !!!
Invece per trasferire da textbox a foglio, la data in formato gg/mm/aa come devo fare ?
Grazie ancora
Invece per trasferire da textbox a foglio, la data in formato gg/mm/aa come devo fare ?
scusa ma già lo fa visto che nella textbox scrivi la data
vero che è un testo ma excel nel trasferimento alla cella la riconverte in data
Non proprio, conviene sempre passargli una data invece di un testo (cast da testo a data) con
CDate("data da salvare")
immagino come "yyyymmdd"
Certamente
pero' percepisco del sarcasmo in scossa
... e non mi sorprende, come mai?
Invece per trasferire da textbox a foglio, la data in formato gg/mm/aa come devo fare ?
effettivamente non lo fa, ho dovuto adottare il suggerimento di LucaSR ed in quel caso tutto ok
Grazie comunque Gianfranco55, mi sei stato veramente di grande aiuto
Non proprio, conviene sempre passargli una data invece di un testo (cast da testo a data) con
grazie mille, ora è perfetto !
-
AutoreArticoli
