› Sviluppare funzionalita su Microsoft Office con VBA › Inserire valore di una moltiplicazione in textbox mantenendo formattazione
-
AutoreArticoli
-
Ciao a tutti,
Sto cercando di effettuare modifiche multiple in un foglio tramite checkbox.
Una di queste operazioni è una moltiplicazione che viene inserita in una textbox e successivamente con un tasto nel foglio.
Ora sono riuscito ad inserire i dati nella textbox cosi:
Private Sub CheckBox1_Click() If CheckBox1.Value = True Then TextBox5.Value = Range("B24").Value * 2 TextBox6.Value = Range("D24").Value * 2 End If End Subma quando poi clicco sul tasto per inserire i dati questi vengono inseriti ma la cella d24 che è formattata come valuta non mi mantiene la formattazione e diventa numero, il codice del tasto è questo e c'è proprio una sezione per mantenere la formattazione ma non capisco perche non funziona e perchè solo con quella cella:
Private Sub btnConferma_Click() Dim i As Byte Dim x As Variant x = Array("B22", "D22", "B23", "D23", "B24", "D24", "D43", "D44", "D51") With ThisWorkbook.Worksheets("Input") For i = 1 To 9 'se textbox vuota allora lascia invariata la cella processata If Controls("Textbox" & i) <> "" Then .Range(x(i - 1)) = Controls("Textbox" & i).Value .Range(x(i - 1)).NumberFormat = NumberFormat_in_Celle1(i) End If Next i End With End Suballego file per prove
Allegati:
You must be logged in to view attached files.Ciao
Al momento non sono in grado di fare prove ma ti ricordo che tutto ciò che esce da una TextBox è una STRINGA quindi prima di passarlo alla formattazione e al foglio devi convertirlo in valore. Prova a modificare la macro così e dimmi cosa viene fuori.
With ThisWorkbook.Worksheets("Input") For i = 1 To 9 'se textbox vuota allora lascia invariata la cella processata If Controls("Textbox" & i) <> "" Then .Range(x(i - 1)) = CDbl(Controls("Textbox" & i).Value) .Range(x(i - 1)).NumberFormat = NumberFormat_in_Celle1(i) End If Next i End WithCioè anteponi CDbl al contenuto della textbox
Fai sapere. Ciao,
Mario
ho capito dove sta il vero problema:
sicuramente sul codice del bottone che probabilmente se trova un valore decimale non mantiene la formattazione valuta della cella, mentre se si inserisce un valore intero lo mantiene. Quindi il problema è solo quando si inserisce un valore con 2 decimali
Private Sub btnConferma_Click() Dim i As Byte Dim x As Variant x = Array("B22", "D22", "B23", "D23", "B24", "D24", "D43", "D44", "D51") With ThisWorkbook.Worksheets("Input") For i = 1 To 9 'se textbox vuota allora lascia invariata la cella processata If Controls("Textbox" & i) <> "" Then .Range(x(i - 1)) = Controls("Textbox" & i).Value .Range(x(i - 1)).NumberFormat = NumberFormat_in_Celle1(i) End If Next i End With End Subfunziona marius grazie mille
Ciao Marius,
Avevo risolto ma mi si è presentato un altro problema, inserendo questo codice
Private Sub btnConferma_Click() Dim i As Byte Dim x As Variant x = Array("B22", "D22", "B23", "D23", "B24", "D24", "D43", "D51", "D44", "D45") With ThisWorkbook.Worksheets("Input") For i = 1 To 10 'se textbox vuota allora lascia invariata la cella processata If Controls("Textbox" & i) <> "" Then .Range(x(i - 1)) = CDbl(Controls("Textbox" & i).Value) .Range(x(i - 1)).NumberFormat = NumberFormat_in_Celle1(i) End If Next i End With End SubLui mi formatta correttamente i numeri, ma se inserisco un testo in una textbox mi va in debug:
Nel caso specifico sarebbe possibile una doppia funzione per testo e numeri (cioè se inserisco un numero me lo deve formattare come valuta, se inserisco un testo come testo)
Grazie mille a chiunque possa dare una mano
Private Sub btnConferma_Click() Dim i As Byte Dim x As Variant x = Array("B22", "D22", "B23", "D23", "B24", "D24", "D43", "D51", "D44", "D45") With ThisWorkbook.Worksheets("Input") For i = 1 To 10 'se textbox vuota allora lascia invariata la cella processata If Controls("Textbox" & i) <> "" Then .Range(x(i - 1)) = CDbl(Controls("Textbox" & i).Value) .Range(x(i - 1)).NumberFormat = NumberFormat_in_Celle1(i) Else If Controls("Textbox" & i) <> "" Then .Range(x(i - 1)) = Controls("Textbox" & i).Value .Range(x(i - 1)).NumberFormat = NumberFormat_in_Celle1(i) End If end if Next i End With End Subho provato cosi ma non va, penso di sbagliare qualcosa, inoltre questa possibilità si verifica solo sulla cella "d44" dell'ARRAY, quindi si potrebbe creare un'eccezione solo per quella
Ciao a tutti,
ho guardato un po meglio il problema, il metodo di Marius utilizzando questo codice
Private Sub btnConferma_Click() Dim i As Byte Dim x As Variant x = Array("B22", "D22", "B23", "D23", "B24", "D24", "D43", "D51", "D44", "D45") With ThisWorkbook.Worksheets("Input") For i = 1 To 10 'se textbox vuota allora lascia invariata la cella processata If Controls("Textbox" & i) <> "" Then .Range(x(i - 1)) = CDbl(Controls("Textbox" & i).Value) .Range(x(i - 1)).NumberFormat = NumberFormat_in_Celle1(i) Else If Controls("Textbox" & i) <> "" Then .Range(x(i - 1)) = Controls("Textbox" & i).Value .Range(x(i - 1)).NumberFormat = NumberFormat_in_Celle1(i) End If end if Next i End With End Submi permette di mantenere tutte le formattazioni numeri
pero allo stesso tempo mi fa andare in debug tutte le textbox in cui inserisco del testo, ho provato a modificarlo ma niente non va.
Grazie a chiunque voglia aiutare, allego il file per effettuare delle prove, basta inserire cliccare sul tasto modifica fogli ed inserire del testo nelle textbox è andrà subito in debug qui:
.Range(x(i - 1)) = CDbl(Controls("Textbox" & i).Value)Allegati:
You must be logged in to view attached files.prova cosi
se proprio la devi formattattare prova così che poi la formatti con quella che ti serve
.Range(x(i - 1)) =format( Controls("Textbox" & i).Value,"0.00"
poi hai 2 volte la stessa condizione
`Private Sub btnConferma_Click() Dim i As Byte Dim x As Variant x = Array("B22", "D22", "B23", "D23", "B24", "D24", "D43", "D51", "D44", "D45") With ThisWorkbook.Worksheets("Input") For i = 1 To 10 'se textbox vuota allora lascia invariata la cella processata If Controls("Textbox" & i) <> "" Then .Range(x(i - 1)) = Controls("Textbox" & i).Value Else If Controls("Textbox" & i) <> "" Then .Range(x(i - 1)) = Controls("Textbox" & i).Value End If end if Next i End With End Sub`prova cosi
.Range(x(i - 1)) =format( Controls("Textbox" & i).Value,"0.00"
inserendo questa dopo di questa:
.Range(x(i - 1)) = Controls("Textbox" & i).Valuemi escono errori di compilazione ma non riesco ad implementarla
prova cosi
.Range(x(i - 1)) =format( Controls("Textbox" & i).Value,"0.00"
inserendo questa dopo di questa:
.Range(x(i - 1)) = Controls("Textbox" & i).Valuemi escono errori di compilazione ma non riesco ad implementarla
Ma la formattazione per cosa ti serve , e se ti serve quale modo devi formattare
Prova il File allegato
Allegati:
You must be logged in to view attached files.Ciao Oscar e buona domenica,
Allora il tuo file funziona ed era praticamente il mio codice iniziale che inserisce tutti i dati indistintamente, ma questo codice ha un problema con i decimali: cioè se io dall'userform inserisco cifre intere me le inserisce nelle celle e mantiene la formattazione valuta (€), se invece inserisco un valore decimale tipo 100,50, il dato me lo inserisce ma non mi mantiene la formattazione € valuta. Per questo con marius avevamo optato per questo codice
With ThisWorkbook.Worksheets("Input") For i = 1 To 9 'se textbox vuota allora lascia invariata la cella processata If Controls("Textbox" & i) <> "" Then .Range(x(i - 1)) = CDbl(Controls("Textbox" & i).Value) .Range(x(i - 1)).NumberFormat = NumberFormat_in_Celle1(i) End If Next iEnd With
che effettivamente risolve questo problema, ma poi mi da il problema sull'inserimento di eventuale testo. Ti allego immagine per farti capire quello che faccio e cosa succede:
Nell'immagine ti ho evidenziato le modifiche fatte ed il risultato ottenuto
Allegati:
You must be logged in to view attached files.
vedi se va bene inserisciAllegati:
You must be logged in to view attached files.tecnicamente funziona ha solo un problema se si mette lo 0 prima della virgola, se riusciamo ad aggiustarlo se no va bene cosi
allego foto
Allegati:
You must be logged in to view attached files.A mè non fa così spiegami bene quando te lo fa
Prova adesso
è solo questione di formattazione

Allegati:
You must be logged in to view attached files.Eh ma è proprio quello il problema, nell'userform sono presenti textbox che fanno riferimento a numeri e textbox che fanno riferimento a testo, o ancora se vogliamo essere più precisi ti faccio un esempio (se nel campo lato mare io ho un numero, ma voglio darlo omaggio, andrò a scrivere OMAGGIO). Il problema è qui: nello stesso userform ci possono essere situazioni di inserimento dati diverse quindi non ci può essere un solo codice che formatta un solo genere di cella ma deve essere tipo dinamico:
Gli dovremmo dire se inserisci un numero formattalo valuta € 1,00, se invece inserisco testo formatta come testo
Spero di essermi spiegato bene e grazie mille dell'aiuto
non so se ci siamo intrecciati con i commenti
non so se ci siamo intrecciati con i commenti
Si ho capito prova l'ultima che ti ho mandato 5.0.2.1 quella prende sia i numeri che lettere
ma dipende solo da come la formatti
0,0.00 così prende solo numeri
#,0.00 così prende numeri e lettere
sembra funzionare tutto alla perfezione.
Grazie mille
Ciao Oscar,
Allora ho fatto varie prove e mi sono reso conto che c'è un problema quando si va ad inserire il valore numerico.
Es. Io inserisco un valore numerico nell'userform ed inserisco i dati, l'userform inserira un valore testuale del tipo (€ 1799,00), questo crea un problema nella cella D65 (cella di somma totale del preventivo) che non riconosce più quella cella come numerica essendo presente un simbolo all'interno e quindi non la somma. Ad esempio se io invece il valore lo scrivo a mano (nel testo sarà presente solo 1799, ma la cella viene formattata come valuta e quindi si somma tranquillamente faccio un video per farti vedere il problema e ti allego immagine A con spiegazione.
Grazie mille
Allegati:
You must be logged in to view attached files.Non mi ero accorto che sotto avevi delle formule
devi mettere CDbl davanti
che poi non capisco perchè mischi formule e macro così fai solo casino
If Controls("Textbox" & i) <> "" Then .Range(x(i - 1)) = CDbl(Format(Controls("Textbox" & i), "€ #,0.00")) End IfAllegati:
You must be logged in to view attached files.Non mi ero accorto che sotto avevi delle formule
devi mettere CDbl davanti
Ciao Oscar, intanto grazie per l'aiuto, purtroppo questa era una soluzione già prospettata da Marius in un post precedente e funziona solo che ti va in debug se inserisci informazioni testuali invece di numeri. Ad esempio se provi a mettere nel campo lato mare "omaggio" va in debug e non inserisce. La butto li da ignorante ma non sarebbe possibile separare le textbox dandogli dei codici diversi ad esempio per i numeri:
.Range(x(i - 1)) = CDbl(Format(Controls("Textbox" & i), "€ #,0.00"))
mentre per il testo:
un codice che non vada a creare problemi con l'inserimento di testo in generale
Se riusciamo con questa casistica basterebbe un esempio di codice poi le textbox me le divido io senza rubarti tempo.
che poi non capisco perchè mischi formule e macro così fai solo casino
lo so che è più complicato ma nel mio lavoro ci sono molte casistiche alcune da gestire in modo particolare e quindi sto implementando queste casistiche che prima si facevano a mano in modo da farle in modo automatico.
Per me puoi lavorare anche solo su questo codice prendendo in considerazione solo le textbox nell'immagine A allegata:
Private Sub btnConferma_Click() Dim i As Byte Dim x As Variant x = Array("B22", "D22", "B23", "D23", "B24", "D24", "D43", "D51", "D44", "D45", "B14") 'With ThisWorkbook.Worksheets("Input") ' For i = 1 To 11 'se textbox vuota allora lascia invariata la cella processata ' If Controls("Textbox" & i) <> "" Then ' .Range(x(i - 1)) = CDbl(Controls("Textbox" & i).Value) ' .Range(x(i - 1)).NumberFormat = NumberFormat_in_Celle1(i) ' End If ' Next i 'End With With ThisWorkbook.Worksheets("Input") For i = 1 To 11 If Controls("Textbox" & i) <> "" Then .Range(x(i - 1)) = CDbl(Format(Controls("Textbox" & i), "€ #,0.00")) End If Next i End With End SubTi mando un file aggiornato e grazie ancora dell'aiuto
Allegati:
You must be logged in to view attached files.L'unica soluzione che ho trovato per ora è gestire l'errore
Allegati:
You must be logged in to view attached files.Grazie mille, Oscar.
Effettivamente l'errore si risolve ma salta completamente la cella della somma, una bella rogna mannaggia.
Grazie mille comunque dell'aiuto. Aspetto tue se ti viene qualche idea. Grazie
-
AutoreArticoli
