VBA, errata conversione formato numeri. Da Userform per salvare dati

di il
15 risposte

VBA, errata conversione formato numeri. Da Userform per salvare dati

Ciao a tutti,

sto realizzando una user form per inserimento dati e salvataggio in un database sempre di excel.
Ho un problema in quanto a volte devo compilare delle formule e una volta che cerco di salvare i numeri, ottengo risultati in formato Generale o numerico da dover poi convertire in numero. come mai?

allego un paio di immagini per chiarire quello che ho fatto

Questa è parte della form
https://imgur.com/ZZZ0fE

Le prime due formule sono inerenti alle prime due caselle da compilare e sono relative a una formule, mentre le successive tre sono relative a dei valori che devono semplicemente essere immessi
https://imgur.com/etuQkK

infine con il codice per salvare i record registrati ottengo questa cosa
https://imgur.com/L3rlpm

Come vedere la prima (che è una formula) diventa generale e il risultato è sbagliato, dovrebbe essere 6,8256 ma non capisco perchè mi stampi questo valore
La seconda che è una formula è però corretta
infine le altre tre che sono dei semplici inserimenti di valori sono comunque da convertire in formato numero per l'analisi che poi devo fare successivamente.

come mai? grazie per l'aiuto!

15 Risposte

  • Re: VBA, errata conversione formato numeri. Da Userform per salvare dati

    Ciao
    non ho visionate le immagini.
    Parli di realizzare una UserForm e di volere salvare i dati (in sintesi). Ritengo che per inserire i dati utilizzi delle TextBox e, se così è, ti ricordo che la proprietà Text della TextBox restituisce una stringa (contenete un numero ma sempre una stringa) mentre a te serve quel numero nel tipo di dato numerico (Integer, Long, Double...). Prima di utilizzare il contenuto della TextBox devi fare una conversione nel tipo di dato di cui hai bisogno.

    Il tutto se ho capito bene il tuo problema.
    Ciao,
    Mario
  • Re: VBA, errata conversione formato numeri. Da Userform per salvare dati

    Beh si hai compreso perfettamente!

    numriga = numriga + 1
    txtv21a1 = Format(Val(txtv21a1.Value), "#,##0.00")
    Foglio1.Cells(numriga, 1) = txtdata.Text
    Foglio1.Cells(numriga, 2) = etv21.Text
    Foglio1.Cells(numriga, 3) = etv21a1.Text
    Foglio1.Cells(numriga, 4) = txtv21a1.Text

    Può essere sufficiente la conversione che ho fatto? mi restituisce un valore con due cifre decimali, ma approssimato all'intero superiore o inferiore. per capirci il risultato è 6,23 mi da 6,00
  • Re: VBA, errata conversione formato numeri. Da Userform per salvare dati

    Ciao
    Quando devo convertire una stringa (nell'esempio in A1) in un numero decimale (nell'esempio in B1) uso questa:
    Cells(1, 2) = CDbl(Cells(1, 1))
    Prova ad adattarla alle tue esigenze. Ti consiglio anche di leggere la Guida al titolo Conversione
    Cia,
    Mario
  • Re: VBA, errata conversione formato numeri. Da Userform per salvare dati

    Per adattarlo alla mia esigenza secondo te è sufficiente fare così?

    numriga = numriga + 1
    Foglio1.Cells(numriga, 1) = txtdata.Text
    Foglio1.Cells(numriga, 2) = etv21.Text
    Foglio1.Cells(numriga, 3) = etv21a1.Text
    Foglio1.Cells(numriga, 4) = txtv21a1.Text
    Foglio1.Cells(numriga, 5) = CDbl(Foglio1.Cells(numriga, 4))

    Praticamente aggiungo un report, ma che almeno non devo poi convertirlo in numero e la cosa mi piace (forse per le mie conoscenze è la strada più lunga)

    Il problema è che in una precedente istruzione io faccio questa cosa:
    txtv21a1.Text = txtccv21a1.Text * 1.896

    in una prova ottengo il risultato 68,362 (decine) dalla userform, però poi me lo stampa come stringa 68.362 (migliaia) e con la conversione numero diventa 68362.

    Dunque non mi torna. Dove sbaglio?
  • Re: VBA, errata conversione formato numeri. Da Userform per salvare dati

    Ciao
    ma non sarebbe più semplice depurare il file da eventuali dati sensibili e allegarlo?
    In tal modo si "vedrebbe" e "capirebbe" meglio l'esigenza che hai.

    In teoria, per trasferire un "numero" da una TextBox (o da Combo o da qualsiasi oggetto che restituisce una stringa) basta usare la funzione CDbl o altre adatte allo scopo. Ti ho suggerito di leggere la Guida. Lo hai fatto?

    Ciao,
    Mario
  • Re: VBA, errata conversione formato numeri. Da Userform per salvare dati

    Ahime non riesco a trovarla mannaggia! sempre in sezione Excel??

    Al momento sembra aver risolto la questione calcolo così
    txtv21a1.Text = txtccv21a1.Value * 1.896

    Allego il file. (funziona da questo hosting???)
    http://www.filedropper.com/provaanalis

    Praticamente è una maschera di inserimento di analisi chimiche. In alcune basta inserire un numero, mentre in altre, dopo aver fatto un inserimento devo sviluppare un calcolo, stampare il risultato e salvarlo in un database che poi utilizzerò con tabelle pivot grafici per monitorare gli andamenti ecc ecc...

    Mi sorge un altro problema che non riesco a gestire , la data!!
    quando la salvo nelle celle di excel , me la ordina sempre dal numero piu piccolo al piu grande, mi spiego, se devo salvare 10/01/2018, me la ordina come 01/10/2018. Dovuto sempre alla conversione da stringa??
  • Re: VBA, errata conversione formato numeri. Da Userform per salvare dati

    Ciao
    No, non in Excel bensì in VBA. Fai così: dal Foglio Excel clicca ALT + F11; nella finestra che si apre vedi in alto verso destra c'è un ? (punto interrogativo), cliccaci sopra; nella ulteriore finestra, in alto a sinistra inserisci : Funzioni di conversione del tipo

    Allo stesso modo cerca: Formati di data e ora definiti dall'utente (funzione Format)

    Il file non si riesce a scaricare. Il sito è quello giusto ma sembra che tu abbia caricato un file vuoto.

    Ciao,
    Mario
  • Re: VBA, errata conversione formato numeri. Da Userform per salvare dati

    Questo dovrebbe funzionare, l'ho scaricato e si apre correttamente

    http://www.filedropper.com/provaanalisi_
  • Re: VBA, errata conversione formato numeri. Da Userform per salvare dati

    Ciao

    Nella macro del pulsante 1, dopo l'accertamento del valore inserito come data, metti questa riga
    dt = Format(CDate(txtdata), "mm/dd/yyyy")

    Questo perchè le date in VBA vengono gestite all'americana.

    Adesso devo scappare. Nel pomeriggio darò uno sguardo ai valori delle diverse TextBox e capire se è possibile impostare un ciclo (non tutta quella caterva di istruzioni simili).

    Dimmi se così la data la riporta esatta. Ciao,
    Mario


    PS - dimenticavo. Le date dalla riga 281 alla 311 ... non le capisco
  • Re: VBA, errata conversione formato numeri. Da Userform per salvare dati

    PS - dimenticavo. Le date dalla riga 281 alla 311 ... non le capisco
    ahahah quando ti prende lo sconforto.

    Ammetto che ho scritto un papiro, ma nel mio caos purtroppo ci capisco.
    Ammetto che sono uno che il vba l'ha scoperto ieri e sto cercando di copiare e incollare righe di codice che vedo su youtube e leggo da forum specifici e non.

    Lo so detto questo mi odierai! ahah

    Però dai piano piano sto organizzando qualcosa di carino no? Tieni presente che questa è la user form del lunedì, poi ci sarà il martedì ecc... Questa è solo per una linea, qui abbiamo tre linee da gestire ahah.

    Ma una volta capito come gira, poi è un copia e incolla generale.

    Ho costruito questa cosa sulla base del database più facile da realizzare e gestire in termini di dati e mi sembrava la più comoda
  • Re: VBA, errata conversione formato numeri. Da Userform per salvare dati

    Ciao

    Prova a sostituire questo pezzo di codice (riferito alla data nella TextBox)
    
    If IsDate(txtdata.Value) Then
        If txtdata.Value <> Format(DateValue(txtdata), "dd/mm/yyyy") Then
            MsgBox "Il formato deve essere: dd/mm/yyyy'"
        End If
        dt = CDate(txtdata)
    Else
        MsgBox "Non è una data"
    End If
    
    Quando dovrai riportare la data nel Foglio fai riferimento alla variabile " dt ".

    Per come sono strutturati il Foglio e, principalmente, la UserForm è pressochè impossibile apportare migliorie sostanziali.

    Permettimi un consiglio: se, come dici, hai "conosciuto" VBA da ieri, incomincia imparando a camminare! Dopo potrai correre. Quello in cui ti sei imbarcato è quasi da Formula1!
    Fai attenzione e ... studia.

    Ciao,
    Mario
  • Re: VBA, errata conversione formato numeri. Da Userform per salvare dati

    Grazie per quel pezzo di codice. Nel pomeriggio lo provo.

    Capisco che purtroppo la maschera da gestire é complessa..però provando e riprovando penso faccia quello che davvero voglio. Almeno per ora. Il problema forse verrà quando dovrò inserire condizioni di controllo sugli inserimenti.

    Per come ti ho descritto il problema, secondo te come si muove quello che ho realizzato??

    Un saluto e buona domenica
  • Re: VBA, errata conversione formato numeri. Da Userform per salvare dati

    Volevo provare a fare un controllo:

    Se la textbox è vuota, non salvarmi il record, ma passa alla textbox successiva.

    Per come ho impostato la userform e non avendo mai inserito un qualcosa di iterativo sulle textbox, immagino sia da matti quello che voglio fare?, dovendo inserire if, if, if in continuazione?

    numriga = numriga + 1

    IF(txtv2a1.text.Lenght > 0)

    Foglio1.Cells(numriga, 1) = txtdata
    Foglio1.Cells(numriga, 2) = etv2.Text
    Foglio1.Cells(numriga, 3) = etv2a1.Text
    Foglio1.Cells(numriga, 4) = txtv2a1.Text
    Foglio1.Cells(numriga, 5) = CDbl(Foglio1.Cells(numriga, 4))

    else Passa alla textbox successiva (ovvero txtv2a2)
  • Re: VBA, errata conversione formato numeri. Da Userform per salvare dati

    Alla fine son riuscito a fare tutto. una volta che stampo un database, creo la tabella pivot. Ma non riesco a dargli un ordinamento in base alla data (meno recente - piu recente) come mai? Posso creare un ordinamento in qualche maniera??

    Lascio un'immagine qui sotto

    https://ibb.co/cwhkF
Devi accedere o registrarti per scrivere nel forum
15 risposte