Condividi tramite

Inputbox che accetti solo numeri interi

Anonimo
2011-07-19T06:21:32+00:00

Ciao.

uso il seguente codice per restituire un certo numero (scelto dall'utente) da utilizzare per successive operazioni.

nr = Application.InputBox(prompt:="mario'.", Title:="pippo", Type:=1)

ma ho visto che accetta anche numeri con la virgola. E' possibile far si che accetti solo numeri interi?

Grazie, ciao

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2011-07-19T11:37:10+00:00

Ciao.

uso il seguente codice per restituire un certo numero (scelto dall'utente) da utilizzare per successive operazioni.

 

nr = Application.InputBox(prompt:="mario'.", Title:="pippo", Type:=1)

 

ma ho visto che accetta anche numeri con la virgola. E' possibile far si che accetti solo numeri interi?

 

Grazie, ciao

Public Sub m()

On Error GoTo Rigaerrore

    Dim v As Variant

    v = Application.InputBox("Inserire un valore intero", Type:=1)

    If v = False Then Exit Sub

    If InStr(v, ",") Then

        Err.Raise vbObjectError

    End If

    MsgBox v

    'codice che utilizza v

RigaChiusura:

    Exit Sub

Rigaerrore:

    MsgBox "Inserire un numero intero"

    Resume RigaChiusura

End Sub

La risposta è stata utile?

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2011-07-19T08:05:49+00:00

Buongiorno,

non direttamente e comunque non riveli come hai dichiarato la variabile nr.

Prova in questo modo (ipotizzando che il codice sia inserito in uno degli eventi del foglio1):


Dim nr As String

nr = Application.InputBox(prompt:="mario'.", Title:="pippo")

If InStr(1, nr, ".") > 0 Or InStr(1, nr, ",") > 0 Then

    MsgBox "non è un numero intero"

    Exit Sub

Else

    Me.Range("A1") = CInt(nr)

End If


David

La risposta è stata utile?

0 commenti Nessun commento

4 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2011-07-19T11:53:00+00:00

    Ciao Fabri,

    dall'help di excel: "definisce la posizione di inizio per ciascuna ricerca".

    In effetti è un parametro facoltativo in quanto di default la ricerca comincia sempre da 1, personalmente però trovo opportuno specificarlo sempre.

    Fai attenzione che se l'utente non digita nulla nella input box il codice ti evidenzierà un errore in quanto non ho implementato la relativa gestione (che trovi invece nella soluzione proposta da Mauro)

    David

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2011-07-19T11:45:18+00:00

    If InStr(1, nr, ".") > 0 Or InStr(1, nr, ",") > 0 Then

      

    Ciao e grazie per la risposta.

     

    Il tuo codice funziona perfettamente. Come avevi intuito, ho solo dovuto cambiare la variabile nr

    (che avevo dichiarato Long) in String

     

    Poichè mi piace capire, puoi specificarmi meglio come funziona il tuo codice?

    Ho capito quasi tutto tranne una cosa: nel comando

    InStr(1, nr, ".")

    che significato ha l' 1 ?

     

    Grazie, ciao.

    Occhio. Conviene sempre dichiarare As Variant la variabile che riceve il valore dell'Application.InputBox, in quanto se premi annulla restituisce un False, quindi potrebbe causare errori inaspettati. In pratica, devi valutare *cosa*restituisce l'InputBox. se un False, esci dalla routine(hanno premuto Annulla). Nel variant basta cercare la virgola che eventualmente divide l'intero dal decimale (InStr(v, ",")). Se c'è, vai all'errore(err.Rise). Se non c'è virgola, il valore numerico è intero. Che sia numerico è definito da Type:=1. Mi riferisco al codice che ho postato io. Quello di David a me da errore se premo False.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2011-07-19T11:26:06+00:00

    If InStr(1, nr, ".") > 0 Or InStr(1, nr, ",") > 0 Then

      

    Ciao e grazie per la risposta.

    Il tuo codice funziona perfettamente. Come avevi intuito, ho solo dovuto cambiare la variabile nr

    (che avevo dichiarato Long) in String

    Poichè mi piace capire, puoi specificarmi meglio come funziona il tuo codice?

    Ho capito quasi tutto tranne una cosa: nel comando

    InStr(1, nr, ".")

    che significato ha l' 1 ?

    Grazie, ciao.

    La risposta è stata utile?

    0 commenti Nessun commento