Condividi:        

VBA inserire solo numeri interi e decimali in textbox

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

VBA inserire solo numeri interi e decimali in textbox

Postdi Marco75CT » 18/06/16 09:55

Ciao a tutti,
ho un problema che non riesco a risolvere.
In una textbox devo fare in modo che l'utente possa inserire solo numeri interi o decimali e che possa inserire solo il simbolo della virgola per separare le due cifre decimali.
Se inserisce dei caratteri alfabetici o dei simboli diversi dalla virgola, deve uscire un messaggio di errore che, sull'ok lo riporti sulla textbox per inserire il numero corretto.
E' possibile?
Grazie
Marco75CT
Utente Senior
 
Post: 146
Iscritto il: 05/08/11 11:54

Sponsor
 

Re: VBA inserire solo numeri interi e decimali in textbox

Postdi Anthony47 » 18/06/16 21:59

Usa gli eventi TextBox_Change e TextBox_Exit; ad esempio:
Codice: Seleziona tutto
Private Sub TextBox1_Change()
If Not IsNumeric(TextBox1.Text) And TextBox1.Text <> "" Then
    TextBox1.SelStart = Len(TextBox1.Text) - 1
    TextBox1.SelLength = 1
End If
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsNumeric(TextBox1.Text) And TextBox1.Text <> "" Then
    TextBox1.SelStart = 0
    TextBox1.SelLength = Len(TextBox1.Text)
    Cancel = True
End If
End Sub

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: VBA inserire solo numeri interi e decimali in textbox

Postdi Marco75CT » 19/06/16 18:02

Ciao Anthony,
grazie per la risposta.
Purtroppo continua a darmi l'anomalia che cercavo di evitare.
In pratica, se inserisco in TextBox1 un valore con il punto, es. 9.2, mi considera 92 (il valore in TextBox1 viene moltiplicato con un altro).
Se invece inserisco un valore con la virgola, es. 9,2, il valore viene letto correttamente.
Quello che vorrei, se fosse possibile, è trovare un metodo per far si che il punto si trasformi in virgola oppure al massimo che dia un errore.
Avevo trovato questa soluzione sul web, ma non funziona.
Codice: Seleziona tutto
Private Sub txtOnlyDecimal_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtOnlyDecimal.KeyPress
 
        ' Accetto solo l'immissione di numeri interi e decimali
 
        ' Recupero il codice ascii del tasto digitato
        ' il tasto digitato è memorizzato nella proprietà "KeyChar"
        ' dell'oggetto System.Windows.Forms.KeyPressEventArgs
        Dim KeyAscii As Short = Asc(e.KeyChar)
 
        ' In questo caso oltre a consentire numeri, tasto Canc
        ' e tasto BackSpace, devo consentire anche l'immissione
        ' del punto e della virgola
        If KeyAscii < 48 And KeyAscii <> 24 And KeyAscii <> 8 And e.KeyChar <> "." And e.KeyChar <> "," Then
            KeyAscii = 0
        ElseIf KeyAscii > 57 Then
            KeyAscii = 0
        End If
 
        ' Faccio in modo che se l'utente digita la virgola
        ' mi appaia il punto
        If e.KeyChar = "," Then
            KeyAscii = 46 ' 46 è il codice ascii del punto
        End If
 
        ' Il punto è si consentito
        ' ma non come primo carattere
        If txtOnlyDecimal.TextLength = 0 And KeyAscii = 46 Then
            KeyAscii = 0
        End If
 
        ' ovviamente se c'è già un punto
        ' non è consentito digitarne altri
        If (KeyAscii = 46) And _
            txtOnlyDecimal.Text.IndexOf(".") > 0 Then
            KeyAscii = 0
        End If
 
        ' Reimposto il keychar
        e.KeyChar = Chr(KeyAscii)
 
    End Sub

Marco75CT
Utente Senior
 
Post: 146
Iscritto il: 05/08/11 11:54

Re: VBA inserire solo numeri interi e decimali in textbox

Postdi Marco75CT » 19/06/16 18:52

Ciao Anthony,
per quanto riguarda il punto, ho risolto così
Codice: Seleziona tutto
If InStr(TextBox1.Text, ".") > 0 Then
TextBox1.Text = Replace(TextBox2.Text, ".", ",")

In effetti pare funzionare.
Se inserisco un punto, me lo trasforma in virgola.
Se hai altre soluzioni, mi piacerebbe conoscerle.
Grazie mille
Marco75CT
Utente Senior
 
Post: 146
Iscritto il: 05/08/11 11:54

Re: VBA inserire solo numeri interi e decimali in textbox

Postdi Flash30005 » 20/06/16 02:45

Marco75CT
non occorre la condizione, è sufficiente il replace
Codice: Seleziona tutto
TextBox1.Text = Replace(TextBox2.Text, ".", ",")

perché se esiste il punto viene rimpiazzato con la virgola e se non esiste non fa nulla :)

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: VBA inserire solo numeri interi e decimali in textbox

Postdi Marco75CT » 20/06/16 14:35

Ciao Flash,
hai ragione :oops:
Che figura!
Grazie!
Marco75CT
Utente Senior
 
Post: 146
Iscritto il: 05/08/11 11:54


Torna a Applicazioni Office Windows


Topic correlati a "VBA inserire solo numeri interi e decimali in textbox":


Chi c’è in linea

Visitano il forum: Nessuno e 24 ospiti