Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

gestire "Annulla" di inputbox

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

gestire "Annulla" di inputbox

Postdi riskismoney » 24/06/12 16:51

Come si può gestire l'opzione annulla di imputbox?
Io vorrei poter scrivere:
se da imputbox arriva il comando annulla vai a...

Grazie, saluti.
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Sponsor
 

Re: gestire "Annulla" di inputbox

Postdi patel » 24/06/12 19:32

Codice: Seleziona tutto
Sub a()
b = InputBox("scrivi")
If b = "" Then
  MsgBox "premuto Annulla"
  Exit Sub
End If
MsgBox b
End Sub
patel
Utente Senior
 
Post: 124
Iscritto il: 24/04/12 16:03

Re: gestire "Annulla" di inputbox

Postdi riskismoney » 24/06/12 19:40

patel ha scritto:
Codice: Seleziona tutto
Sub a()
b = InputBox("scrivi")
If b = "" Then
  MsgBox "premuto Annulla"
  Exit Sub
End If
MsgBox b
End Sub


Grazie patel,
quindi annulla restituisce "" (niente) esattamente come ok se non si inserisce alcun valore nella finestra?
A me servivano 3 opzioni:
1. viene inserito un testo ed allora tutto ok
2. non viene inserito un testo e viene cliccato ok (rimando all'input)
3. viene premuto annulla ed allora esco dall routine

Ma se è cosi non posso farlo allora...
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: gestire "Annulla" di inputbox

Postdi PcBase » 24/06/12 21:53

Ciao

Prova così:

Codice: Seleziona tutto
Sub test()
   
    Dim s As String
   
    s = InputBox("Richiesta di input :")

    If StrPtr(s) = 0 Then
        MsgBox "Input annullato"
    End If

End Sub
Windows xp + Office 2003 Ita
Windows8 Office 2013
PcBase
Utente Senior
 
Post: 129
Iscritto il: 24/02/11 23:26

Re: gestire "Annulla" di inputbox

Postdi ricky53 » 24/06/12 22:00

Ciao,
prova in questo modo
Codice: Seleziona tutto
Sub Prova_Input()
' Utilizza una sola delle seguenti due istruzioni
'    Dato_Inserito = Application.InputBox("Inserire i dati desiderati", "Inserimento Dati", , , , , , 1) ' Così vengono accettati soli numeri
    Dato_Inserito = Application.InputBox("Inserire i dati desiderati", "Inserimento Dati", , , , , , 2) ' Così vengono accettati numeri e stringhe

    If Dato_Inserito = False Then
        MsgBox "Premuto Annulla"
        Exit Sub
    End If
    If Dato_Inserito = vbNullString Then
        MsgBox "Non sono stati inseriti dati"
        Exit Sub
    End If
    MsgBox "I dati inseriti sono:  " & Dato_Inserito
End Sub
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: gestire "Annulla" di inputbox

Postdi riskismoney » 25/06/12 07:41

Grazie a tutti, la soluzione di Ricky53 sembra fare al caso mio. Stasera verificherò ma sono certo che il problema è risolto.
Buona giornata, ciaoo :)
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: gestire "Annulla" di inputbox

Postdi riskismoney » 22/01/13 19:15

Riprendo l'ottimo codice suggeritomi a suo tempo da Ricky53.
Il codice funziona perfettamente a patto che nei dati inseriti non si insereisca zero, nel qual caso equivale al tasto annulla.
Perchè per il codice il tasto annulla e l'inserimento di 0 sono uguali?
Come posso fargli riconoscere lo 0 senza perdere la possibilità di gestire annulla?
Grazie ;)
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: gestire "Annulla" di inputbox

Postdi scossa » 22/01/13 21:47

riskismoney ha scritto:Riprendo l'ottimo codice suggeritomi a suo tempo da Ricky53.
Il codice funziona perfettamente a patto che nei dati inseriti non si insereisca zero, nel qual caso equivale al tasto annulla.
Perchè per il codice il tasto annulla e l'inserimento di 0 sono uguali?
Come posso fargli riconoscere lo 0 senza perdere la possibilità di gestire annulla?
Grazie ;)


Un esempio:

Codice: Seleziona tutto
Sub test()
   
    Dim vVar As Variant
 
    vVar = Application.InputBox("Richiesta di input :")
    If vVar = False And VarType(vVar) = vbBoolean Then
        MsgBox "Input annullato"
    ElseIf vVar = vbNullString Then
      MsgBox "Non sono stati inseriti dati"
    Else
      MsgBox "I dati inseriti sono:  " & vVar
    End If

End Sub


P.S.: l'uso di StrPtr(), in quanto funzione non documentata, è sconsigliabile.
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 424
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: gestire "Annulla" di inputbox

Postdi Anthony47 » 23/01/13 00:58

Scusate, ma a me non torna che usando Application.InputBox 0 e Cancel restituiscano lo stesso risultato; questo succede usando invece InputBox. Il fatto e' che la prima sintassi richiama il metodo Inputbox, la seconda richiama la funzione Inputbox, che hanno comportamenti leggermente diversi tra di loro.

Quindi usando
Codice: Seleziona tutto
risposta = Application.InputBox("Dimmi", , , , , , , 2)   'eventualmente senza ulteriori parametri oltre al Prompt

Il valore di "risposta" sara'
-Falso, se premuto Cancel
-una stringa nulla ("") se premuto Ok senza null' altro
-una stringa pari a quanto digitato, se confermato con Ok
-una stringa "0" se premuto 0+Ok (sottocaso del punto precedente)
Questi esiti sono facilmente testabili e senza equivoci per decidere come procedere nella macro.

Se invece di "stringhe" ti servono "numeri" puoi o usare le funzioni di conversione del vba oppure impostare "type" su 1, come ha fatto Ricky nei suoi esempi; ma questa scelta ce l' hai solo con Application.InputBox

Ciao a tutti
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: gestire "Annulla" di inputbox

Postdi riskismoney » 23/01/13 18:39

Anthony a me il codice di ricky che utilizzo da un pezzo, mi da restituisce lo stesso valore sia per lo zero che per l'annulla.
Il codice di scossa invece sembra fare al caso mio. Forse mi sfugge qualcosa non so...
Grazie a tutti, ciaoo
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: gestire "Annulla" di inputbox

Postdi Anthony47 » 24/01/13 01:47

Il comportamento che ho descritto ieri sera l' ho controllato sia su XL2003 che XL2010.
Comunque riguardando bene il codice di scossa ho visto che in effetti tale codice sfrutta proprio questi comportamenti (anche se non ho capito perche' ha inserito anche And VarType(vvAr) = vbBoolean, che mi sembra pleonastico).

Ciao a tutti.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: gestire "Annulla" di inputbox

Postdi scossa » 24/01/13 08:48

Anthony47 ha scritto:Il comportamento che ho descritto ieri sera l' ho controllato sia su XL2003 che XL2010.
Comunque riguardando bene il codice di scossa ho visto che in effetti tale codice sfrutta proprio questi comportamenti (anche se non ho capito perche' ha inserito anche And VarType(vvAr) = vbBoolean, che mi sembra pleonastico).

Ciao a tutti.


Ciao Anthony,

il motivo è da cercare nella "conversione implicita" che il vba effettua sulle variabili.
NElla finestra immediata del VBE scrivi:

Codice: Seleziona tutto
?0=false

otterrai Vero

Codice: Seleziona tutto
?"0"=false

otterrai Vero

ma se scrivi
Codice: Seleziona tutto
?vartype(0)=vartype(false)

o
Codice: Seleziona tutto
?vartype("0")=vartype(false)

otterrai, giustamente Falso

Siccome cliccando la X rossa il metodo Application.Inbutbox restituisce False il semplice test vVar = False è vero sia per vVar pari a 0 che aFalse, da qui l'AND per capire se vVar è effettivamentee un BOOLEAN

N.B.: notare che vVar deve essere dichiarato VARIANT.
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 424
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: gestire "Annulla" di inputbox

Postdi Anthony47 » 24/01/13 10:24

Grazie scossa per la spiegazione.
In effetti hai ragione: io mi fermavo a considerare il solo contenuto della vVar al completamento dell' inputbox, e quindi mi sfuggiva che la successiva "If vVar = False" avrebbe restituito "Vero" anche con vVar=0 oppure vVar="0".
Insomma, mai fermarsi alle apparenze...

Ciao, alla prossima.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "gestire "Annulla" di inputbox":

MB "andata"?
Autore: Cassidy
Forum: Assistenza Hardware
Risposte: 4

Chi c’è in linea

Visitano il forum: Nessuno e 15 ospiti