› Sviluppare funzionalita su Microsoft Office con VBA › Separatore decimale VBA
-
AutoreArticoli
-
Ciao a tutti,
vi scrivo per un problema che trovo abbastanza singolare. Dovevo fare riempire una textbox da una formula matematica, ma inspiegabilmente non riuscivo in alcun modo. Alla fine, ho capito che il problema nasceva quando la formula restituiva un numero decimale (non intero).
Quindi, analizzando in profondità la questione, ho notato una cosa stranissima: quando compilo a mano una textbox, l'unico modo per inserire decimali è usare la virgola (il punto non viene proprio accettato), ma se poi lo stesso numero lo stampo tramite una label, il separatore decimale che compare è il punto.
Com'è possibile che nella stessa interfaccia due controlli gestiscano il separatore decimale in due modi diversi? Come fare in modo che una textbox "accetti" una formula che restituisce un numero decimale?
Grazie a tutti in anticipo!
puoi allegare un file di esempio ? una textbox può contenere solo testo quindi accetta tutti i caratteri, se vuoi inserirci un numero decimale o no lo devi prima trasformare in testo
E' una cosa tipo questa:
Option Explicit
Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To 5
ComboBox1.AddItem i
Next
End SubPrivate Sub CommandButton1_Click()
Dim lung As Double
Dim B(1) As Double
Dim n As IntegerB(0) = TextBox1
B(1) = TextBox2
If ComboBox1.ListIndex > -1 Then
n = ComboBox1
lung = B(0) + B(1) * n
TextBox3.Value = lung / 2
Else: MsgBox "Inserire n corretto"
End If
End SubIl problema è che questa funziona, l'originale invece che è praticamente la stessa cosa ma con molti più campi gestiti in diversi form, inspiegabilmente quando il risultato è decimale, non scrive niente sulla textBox.
Comunque a onor di cronaca, il motivo per cui non potevo digitare il separatore nella textbox è perchè dimenticavo di aver apposta inserito una funzione che permette di scrivere dentro solo numeri. Ma questo è ininfluente perchè essendoci una divisione il risultato da scrivere sulla textbox finale può essere decimale anche partendo da interi.
Scusate mi rendo conto che non sia un processo molto "ordinato" di risolvere un problema, ma sto provando a capire se c'è qualcosa che mi sfugge nella gestione dei decimali. Come mai se digito msgbox Application.decimalSeparator mi esce il "." mentre il risultato del codice scritto sopra, sulla textbox3, quando è decimale mi esce con la virgola?
dimensioni B(1) As Double e poi scrivi B(0) = TextBox1 quindi un double = string, tanto vale non scrivere alcun dimensionamento, magari ti va meglio
Ritieni ci sia un modo più intelligente di acquisire da tastiera un numero per svolgere delle operazioni matematiche?
Ciao
Mi spieghi cosa vuoi dire col post precedente, per favore?
Patel (che saluto) ti ha fatto notare che è inutile dichiarare come Double un dato che, inserito in una TextBox, diventa comunque uno String.
Prova a dare uno sguardo qui https://support.office.com/it-it/article/cambiare-il-carattere-usato-per-separare-le-migliaia-o-i-decimali-c093b545-71cb-4903-b205-aebb9837bd1e
Ovviamente se ho capito il problema.
Ciao,
Mario
Ciao Marius,
Quale post intendi? Se intendi l'ultimo, a fronte del commento di Patel sul fatto che è effettivamente inutile passare una textbox in un double, chiedevo se per applicazioni di carattere matematico, come acquisire numeri ed effettuare operazioni, ci fossero controlli o modalità di acquisizione adatti apposta a maneggiare numeri, invece che textbox che trattano stringhe. Questo perchè in un caso come il mio, in cui ho numerosi operazioni matematiche tra una serie di dati acquisiti da textbox in diversi form, mi è comodo gestire variabili che siano numeriche.
In merito al tuo link, devo distribuire un applicativo che funzioni su tutti i pc quindi purtroppo non mi sarebbe sufficiente cambiare le impostazioni del mio Excel sul separatore. Vorrei quindi capire bene come funziona questo discorso, considerando che:
- Scrivendo numeri dentro VBA, i decimali vanno gestiti con il punto;
- Scrivendo qualcosa tipo Application.decimalSeparator mi restituisce quello che presumo sia il separatore impostato in Excel (che potrei cambiare nel tuo link) - e nel mio caso è ancora il punto;
-Se scrivo qualcosa tipo textbox1.value = 165.5 viene visualizzato 165,5 nella textbox (quindi presumo la textbox consideri la virgola come separatore decimale, a prescindere di come sia impostato Office. Ma questa è una legge universale?)
Tutto ciò lo chiedo perchè probabilmente il mio problema sta proprio in ciò che avete detto voi, ovvero nel passaggio da numeri a textbox (stringhe) e quindi ancora a numeri, che a volte evidentemente fa quello che gli pare.
Grazie a entrambi per l'aiuto!
Quale post intendi? Se intendi l'ultimo, a fronte del commento di Patel sul fatto che è effettivamente inutile passare una textbox in un double,
non è inutile, è sbagliato e può dare problemi, non puoi scrivere textbox1.value = 165.5, ma textbox1.value = "165.5", una textbox può contenere solo testo, è questo che non vuoi capire, il fatto che non ti dia errore non significa che sia corretto quello che fai.
una textbox può contenere solo testo
E' così e infatti se chiedi a Excel di mostrare il VarType del contenuto di una Textbox, ti restituisce 8 (cioè String). Poter assegnare tranquillamente a una Textbox un valore non stringa (potrebbe anche essere booleano) è la conseguenza della conversione implicita che fa Excel al suo interno.
Del resto se passi a una Textbox il valore 165.5, lo vedi trasformato in 165,5 (con la virgola): significa che Excel riconosce che hai passato un valore numerico ma la Textbox lo riconverte in stringa.
Per rispondere a Giulio sulla presenza di moduli o librerie matematiche specifiche , in VBA no (è tutto builtin, incorporato) quindi bisogna smanettare con i diversi tipi di dato disponibili, lottando sia con i formati di conversione che con le impostazioni internazionali della macchina specifica (problemi particolari con le date).
Non ho letto il thread ma magari se ho un attimo lo faccio, così forse posso essere più preciso e più utile 🙂
Ho riprodotto lo scenario di Giulio (un form con una combo, tre textbox e un pulsante) e come ha già detto lui non ci sono problemi (la textbox3 riproduce il risultato della divisione correttamente, con la virgola). Preciso che compare la virgola come separatore decimale perchè ciò dipende dalle impostazioni internazionali della macchina in uso, mentre VBA internamente utilizza altre impostazioni (tipicamente, americane) se non diversamente specificato: per esempio su questa mia versione Application.DecimalSeparator restituisce una virgola.
In effetti il punto è del tutot ignorato, quando inserito a mano nella Textbox e questo provoca errori esilaranti (ehm). Per esempio, 1.1 diventa 11. Puoi immaginarti le conseguenze 🙂 Ecco perchè ti sei scritto la funzione che inibisce i caratteri non numerici (ma io avrei lasciato la virgola tra i caratteri ammessi).
Una prova: nel codice del commandbutton basta mettere
Debug.Print B(0), B(1)e inserire 1.1 e 1,2 nelle textbox1 e textbox2 per verificare cosa succede.
La soluzione che ti propongo, che taglierebbe la testa al toro, è operare una sostituzione del testo (tolgo il punto e metto il separatore decimale default):
B(0) = Replace(TextBox1, ".", Application.DecimalSeparator) B(1) = Replace(TextBox2, ".", Application.DecimalSeparator)Grazie ragazzi, credo di aver inquadrato il punto, giustamente come dite voi la textbox riconosce solo testo, quindi è per questo che non ragiona con il separatore decimale di Application. Da qui deduco che una textbox per fare una conversione implicita del tipo di dato coi decimali che sia corretta, deve ricevere in input un numero con la virgola come separatore, altrimenti la ignora come ha detto vecchio frac (anche io avevo fatto un pò di test ieri), e tutto questo a prescindere dall'impostazione della propria macchina. Insomma, deduco che se voglio che l'utente inserisca un numero decimale da tastiera, e la textbox lo riconosca correttamente, esso deve inserire il numero con la virgola, e questo è universale, vale su qualsiasi macchina del mondo. Poi, se passo questo numero altrove, allora lì la virgola sarà convertita nel separatore decimale della macchina dell'utente. Se questa supposizione è giusta, teoricamente non sarebbe necessario nemmeno sfruttare il replace. Siete d'accordo su questo ragionamento?
Patel, capisco bene cosa intendi, però io devo fare in modo che il codice acquisisca da tastiera dei numeri, questo è un dato di fatto purtroppo, e poi faccia delle operazioni e rimetta il relativo risultato in altre textbox, in quanto questi saranno poi valori di default che devono però poter essere modificati dall'utente se lo desidera. Nel caso del codice che ho postato sopra per esempio, come faresti a scrivere correttamente la riga seguente?
TextBox3.Value = lung / 2
Grazie ancora
teoricamente non sarebbe necessario nemmeno sfruttare il replace
Sì basta assegnare il valore a una variabile del tipo giusto (almeno Single).
come faresti a scrivere correttamente la riga seguente?
TextBox3.Value = lung / 2
Hai chiesto a patel ma provo a dire la mia:
Non ha importanza, tanto quello che finisce nella Textbox è sempre di tipo stringa (il suo Value è sempre VarType = vbString = 8). E' l'operazione contraria che è delicata, cioè recuperarne il valore e considerarlo nel modo corretto:
Dim i As Single i = CSng(Textbox3.Value)Grazie mille come sempre vecchio Frac, quello che dici mi sembra logico. Sei comunque d'accordo che la regola di permettere all'utente di scrivere solo virgola e numeri nelle textbox (per i decimali), dovrebbe funzionare su qualsiasi computer?
Nel mio codice comunque, quello che voglio far funzionare non va come deve.
Addirittura, ho scritto nell'evento activate di un form questo blocco:
Private sub UserForm_Activate()
Dim passo as double
passo=lung/(userForm2.comboBox1 + 1)
debug.print passo
textBox1.value=passo
end sub
Se passo esce decimale, il debug.print mi scrive - ad esempio - 403.6, ma la textBox1 esce vuota! Com'è possibile?
Se passo esce intero, il debug.print scrive - ad esempio - 403, e la textBox1 visualizza correttamente 403
Se passo esce decimale, ma riscrivo la penultima riga come textBox1.value= round(passo), allora la textbox restituisce correttamente il valore.
Se il problema fosse il riconoscimento del tipo giusto dalla textbox (da risolvere con Csng o CDbl), non dovrebbe funzionare in nessun caso, giusto? Secondo te quale può essere il problema?
PS lung è dichiarata double e risulta da un calcolo che sfrutta i valori provenienti da altre Textbox, un pò come nel mio esempio
Sei comunque d'accordo che la regola di permettere all'utente di scrivere solo virgola e numeri nelle textbox (per i decimali), dovrebbe funzionare su qualsiasi computer?
A far bene dovresti permettere anche l'uso del punto (io uso spesso il tastierino numerico, dove accanto allo zero c'è il punto come separatore decimale). Ecco perchè prima nominavo di fare un Replace: per mostrare visivamente nella Textbox una virgola (bisogna smazzarsi a intercettare ogni tasto premuto ma non è difficile l'implementazione).
Per risolvere le altre tue osservazioni, che son interessanti, avrei bisogno dello scenario corretto, altrimenti si possono fare solo delle ipotesi. Che al momento non ho... infatti mi sembra strano che addirittura "la textBox1 esce vuota! "
Si capisco bene cosa intendi e hai sicuramente ragione, ma ritengo che comunque se l'unico carattere permesso oltre il numero sia la virgola, l'utente possa arrivarci da solo di usare quello come separatore, e considerando che comunque il decimale nel mio caso è l'eccezione... l'utente si farà andar bene la virgola
, l'importante è che funzioni tutto senza possibilità di erroreCapisco bene di non avervi messo nelle condizioni ideali per risolvere il problema, ma il codice complessivo oltre a contenere dati sensibili dei miei clienti, è molto lungo e complesso; per cui ho estratto solo le parti interessanti ai fini del post che ho postato sopra. Anche a me sembra stranissimo che non compaia nulla nella textbox, ma ti dirò di più: coi decimali nel blocco
passo=lung/(userForm2.comboBox1 + 1)
debug.print passo
textBox1.value=passo
debug.print textBox1.value
il primo debug.print dà appunto 403.6, il secondo dà ""
Ma chiedo un consiglio a tal proposito, voi suggerite per avere la correttezza formale, che ogni volta che passo una variabile numerica da textBox, di usare:
Dim a as double
a=Cdbl(textBox.value)
O un altro modo per passare numeri? Tenete presente che, nel mio caso, avrò almeno una 50ina di textbox che devono acquisire numeri da utilizzare per le varie operazioni...E tra l'altro devo gestire anche controlli su quei numeri, tipo che siano maggiori di 0, che non si mettano ovviamente più virgole del dovuto, tipo 422,,,5 ecc...
l'utente si farà andar bene la virgola
Però potresti intercettare la digitazione e trasformare al volo il carattere premuto in un carattere ammesso (punto diventa virgola). Qualche tempo fa abbiamo discusso e sistemato questa cosa per un altro utente.
il codice complessivo oltre a contenere dati sensibili dei miei clienti
Non fa niente, ma spero per te che tu non abbia davvero inserito nel codice dei dati sensibili (direttamente nel codice!)
il primo debug.print dà appunto 403.6, il secondo dà ""
Questa cosa mi fa impazzire 🙂
Ma chiedo un consiglio a tal proposito
E' sufficiente dimensionare una variabile per convertire un valore stringa passato ad essa nel tipo corrispondente:
Dim a as double 'non serve forzare con CDbl, perchè 'il valore String che proviene dal 'textbox diventa di tipo Double a = textBox.valueavrò almeno una 50ina di textbox che devono acquisire numeri da utilizzare per le varie operazioni
Ti conviene imparare il concetto di array di controlli.
vecchio frac ha scritto:
Però potresti intercettare la digitazione e trasformare al volo il carattere premuto in un carattere ammesso (punto diventa virgola). Qualche tempo fa abbiamo discusso e sistemato questa cosa per un altro utente.
E' una possibilità, non la vedo nemmeno una cosa complicata che posso inserire nella funzione del controllo dei caratteri che ho già. Tu pensi sia più opportuno gestire il solo separatore con il punto in generale, o intendi proprio di permetterli entrambi come inserimento e poi trasformare il punto in virgola? Nel secondo caso ho paura si possa creare confusione col separatore delle migliaia
vecchio frac ha scritto:
Non fa niente, ma spero per te che tu non abbia davvero inserito nel codice dei dati sensibili (direttamente nel codice!)Non proprio, diciamo che però l'interfaccia è creata ad hoc sull'uso del cliente e quindi con dati anche personali (ma ogni cliente avrà un'interfaccia dedicata)
vecchio frac ha scritto:
Questa cosa mi fa impazzire
Figurati a me
Anche perchè il codice che ho messo sopra funziona...Comunque penso che arrotonderò semplicemente all'intero, così funziona...Anche se è un compromesso che onestamente mi fa schifovecchio frac ha scritto:
E' sufficiente dimensionare una variabile per convertire un valore stringa passato ad essa nel tipo corrispondente:
E' la strada che sto seguendo in effetti, però questo tipo di assegnazione (e anche l'inversa) è stato criticato aspramente da Patel e Marius a inizio post
vecchio frac ha scritto:
Ti conviene imparare il concetto di array di controlli.
Molto interessante, questa è effettivamente una cosa che non conosco. Sapresti consigliarmi un link o fonte da studiare in merito?Io non vedo come scenario reale l'utente che inserisce il separatore delle migliaia. Il punto è "decimale" proprio perchè servirebbe solo per introdurre le cifre decimali. Comunque è solo un problema di rappresentazione.
Riguardo i dati sensibili, avevo ben capito che l'interfaccia contiene loghi e informazioni riservate, ma tu parlavi di dati inseriti nel codice e mi pareva strano 🙂
Perchè l'assegnazione a una variabile ti è stata criticata? rileggerò con attenzione i primi post, ma penso ci sia stato un fraintendimento.
Di risultati sugli array di controlli ne trovi molti. Ti allego per studio un piccolo progetto. Non te lo spiego, guardalo e vediamo se ti frulla qualche domanda 🙂
Avvia il form e scrivi qualcosa nelle textbox: testo, numeri, numeri con virgola. Poi guarda il codice. Ci rivediamo qui 😉
Allegati:
You must be logged in to view attached files.Ero intervenuto su quanto scritto da patel
dimensioni B(1) As Double e poi scrivi B(0) = TextBox1 quindi un double = string, tanto vale non scrivere alcun dimensionamento, magari ti va meglio
Ribadisco ( e penso che anche Patel sarà d'accordo) che non si criticava l'assegnazione di un valore ad una variabile bensì si riteneva inutile dimensionare (dichiarare) una variabile come Double quando poi le si assegna uno String.
Il mio consiglio (da anziano quale sono): metti sempre in testa al Modulo dove scrivi il codice "Option Explicit"; ti eviterà tanti mal di testa.
Ciao,
Mario
Esatto Marius, io sono tra quelli che di solito non dimensiona le variabili, ma talvolta è necessario e bisogna farlo con cognizione, comunque meglio non dimensionare che dimensionare a sproposito
Grazie ragazzi, però il punto, al di là dell'aspetto formale sull'assegnazione di variabili di tipo diverso, per me è come gestire nella pratica questo tipo di applicazione, ovvero acquisire da textbox dei numeri che devono essere poi assegnati a variabili visto che bisogna fare varie operazioni matematiche, controlli sui valori, ecc ecc. Queste variabili, in pratica, voi le dichiarereste senza tipo? Non fareste come ha suggerito vecchio frac nel post che riporto sotto (e che è un pò il sistema che ho sempre seguito personalmente)?
vecchio frac ha scritto:
E' sufficiente dimensionare una variabile per convertire un valore stringa passato ad essa nel tipo corrispondente:
Dim a as double'non serve forzare con CDbl, perchè'il valore String che proviene dal 'textbox diventa di tipo Doublea = textBox.value
Ci tengo a chiarire che questo per me non è un "creare polemica", ma è un confronto che trovo molto utile per capire se al di là degli aspetti formali che sono chiari a tutti, nella pratica ci possano essere punti di vista e modalità di approccio ai problemi differenti, e magari più efficienti, di quello che sono abituato a seguire.Vecchio frac, ti ringrazio infinitamente per il codice e il suggerimento sugli array dei controlli. Ammetto che ho dovuto studiarmelo perchè per molti aspetti è qualcosa di nuovo per me. Cavolo pensare che nel mio codice ho decine e decine di eventi change e afterupdate dei controlli tutti uguali tra loro
...Mi sa che riscriverò tutti i controlli su combo e textbox con questo approccio perchè vado a risparmiare un sacco di righe di codice Ti chiedo solo delucidazioni sul workflow del codice che mi hai mandato: hai creato la classe di textbox che gestisce l'evento del controllo dei caratteri da tastiera, per ogni textbox hai istanziato la variabile mTextBoxes di una nuova istanza della classe che hai creato con la textbox stessa e tutte queste istanze le hai aggiunte alla collection. Ora, se ho capito bene, avendo una collezione di oggetti che hanno la variabile interna che gestisce gli eventi assegnata a ciascuna textbox, il programma intercetta per tutti i textbox la digitazione da tastiera e la gestisce con il relativo evento nella classe. Ho quindi due domande per capire meglio come funziona il tutto: visto che il cuore del codice mi sembra che sia la riga Set TxtEvent.mTextboxes = oCtrl, la collezione a cosa serve in realtà? E' solo una comodità, ma sarebbe stato possibile anche gestirlo, ad esempio, come un array di textBoxClass(), oppure creando una serie indicizzata di variabili txtEvent1, txtEvent2, ...? E soprattutto, perchè poi set txtEvent=nothing?
Grazie ragazzi, però il punto, al di là dell'aspetto formale sull'assegnazione di variabili di tipo diverso, per me è come gestire nella pratica questo tipo di applicazione, ovvero acquisire da textbox dei numeri che devono essere poi assegnati a variabili visto che bisogna fare varie operazioni matematiche, controlli sui valori, ecc ecc. Queste variabili, in pratica, voi le dichiarereste senza tipo? Non fareste come ha suggerito vecchio frac nel post che riporto sotto (e che è un pò il sistema che ho sempre seguito personalmente)?
vecchio frac ha scritto:
E' sufficiente dimensionare una variabile per convertire un valore stringa passato ad essa nel tipo corrispondente:
Dim a as double'non serve forzare con CDbl, perchè'il valore String che proviene dal 'textbox diventa di tipo Double a = textBox.valueCi tengo a chiarire che questo per me non è un "creare polemica", ma è un confronto che trovo molto utile per capire se al di là degli aspetti formali che sono chiari a tutti, nella pratica ci possano essere punti di vista e modalità di approccio ai problemi differenti, e magari più efficienti, di quello che sono abituato a seguire.
Mario grazie, Option explicit non può mai mancare anche se a volte quasi non mi ricordo nemmeno perchè lo metto tanto è automatico
Vecchio frac, ti ringrazio infinitamente per il codice e il suggerimento sugli array dei controlli. Ammetto che ho dovuto studiarmelo perchè per molti aspetti è qualcosa di nuovo per me. Cavolo pensare che nel mio codice ho decine e decine di eventi change e afterupdate dei controlli tutti uguali tra loro
...Mi sa che riscriverò tutti i controlli su combo e textbox con questo approccio perchè vado a risparmiare un sacco di righe di codice Ti chiedo solo delucidazioni sul workflow del codice che mi hai mandato: hai creato la classe di textbox che gestisce l'evento del controllo dei caratteri da tastiera, per ogni textbox hai istanziato la variabile mTextBoxes di una nuova istanza della classe che hai creato con la textbox stessa e tutte queste istanze le hai aggiunte alla collection. Ora, se ho capito bene, avendo una collezione di oggetti che hanno la variabile interna che gestisce gli eventi assegnata a ciascuna textbox, il programma intercetta per tutti i textbox la digitazione da tastiera e la gestisce con il relativo evento nella classe. Ho quindi due domande per capire meglio come funziona il tutto: visto che il cuore del codice mi sembra che sia la riga Set TxtEvent.mTextboxes = oCtrl, la collezione a cosa serve in realtà? E' solo una comodità, ma sarebbe stato possibile anche gestirlo, ad esempio, come un array di textBoxClass(), oppure creando una serie indicizzata di variabili txtEvent1, txtEvent2, ...? E soprattutto, perchè poi set txtEvent=nothing?
PS io una piccola modifica che farei al tuo codice è cambiare la riga mTextboxes = Format(mTextboxes, "#,##0.00") in: mTextboxes = iif(mTextBoxes.value-int(mTextBoxes.value)>o,Format(mTextboxes, "#,##0.00"),Format(mTextboxes, "#,##0") ) per fare in modo da eliminare i decimali nella formattazione se non ci sono (gusto estetico puramente soggettivo), e la sposterei in un evento afterUpdate in modo che funzioni anche semplicemente se l'utente clicca fuori dalla textbox e non solo con enter o tab.
Io, per onore della cronaca, avevo gestito questa cosa in un altro modo (che peraltro trovo meno elegante del tuo):
Private Sub txtBox_Change()
Static txtTemp As String
txtTemp = blockLetter(txtBox, txtTemp)
End SubFunction blockLetter(ByRef cnt As MSForms.control, temp) As String
If cnt Like "*[!0-9,]*" or cnt like "*,*,*" or cnt like "*,[0-9][0-9]" Then 'Permesso un solo decimale
cnt = temp
blockLetter = temp
Exit Function
End If
blockLetter = cntEnd Function
Ovviamente per permettere anche l'uso del punto inserirei semplicemente all'inizio un replace del punto con la virgola.
riscriverò tutti i controlli su combo e textbox con questo approccio
Bisogna vedere se il gioco vale la candela. Per relativamente pochi controlli non serve (diciamo che se sono una decina o più allora sì). Tieni conto che non tutti gli eventi si possono intercettare con questo sistema.
Ho quindi due domande per capire meglio come funziona il tutto: visto che il cuore del codice mi sembra che sia la riga Set TxtEvent.mTextboxes = oCtrl, la collezione a cosa serve in realtà? E' solo una comodità, ma sarebbe stato possibile anche gestirlo, ad esempio, come un array di textBoxClass(), oppure creando una serie indicizzata di variabili txtEvent1, txtEvent2, ...? E soprattutto, perchè poi set txtEvent=nothing?
La collezione serve a simulare l'array di controlli. In VB6 era possibile indicizzare i controlli: textbox(0), textbox(1), textbox(2) eccetera mentre in VBA non è consentito. La collection permette una rudimentale indicizzazione, tenendo insieme una serie di oggetti tutti uguali. Non è una comodità, è la tecnica utilizzata in questo contesto 🙂 proprio perchè non puoi avere (in VBA) un array di textboxclass() che riceva gli eventi di ogni oggetto textbox... impostare a nothing ogni controllo ti permette di ripulire la relativa area di memoria per l'assegnazione successiva.
una piccola modifica che farei al tuo codice è cambiare
Certo, sei libero di sperimentare 🙂
-
AutoreArticoli
