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 ramset1978 » 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.
Ramset1978
Win 7 + Office 2010 Ita
ramset1978
Utente Senior
 
Post: 223
Iscritto il: 25/03/12 16:04
Località: Avezzano

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: 309
Iscritto il: 24/04/12 16:03

Re: gestire "Annulla" di inputbox

Postdi ramset1978 » 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...
Ramset1978
Win 7 + Office 2010 Ita
ramset1978
Utente Senior
 
Post: 223
Iscritto il: 25/03/12 16:04
Località: Avezzano

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: 143
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. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: gestire "Annulla" di inputbox

Postdi ramset1978 » 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 :)
Ramset1978
Win 7 + Office 2010 Ita
ramset1978
Utente Senior
 
Post: 223
Iscritto il: 25/03/12 16:04
Località: Avezzano

Re: gestire "Annulla" di inputbox

Postdi ramset1978 » 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 ;)
Ramset1978
Win 7 + Office 2010 Ita
ramset1978
Utente Senior
 
Post: 223
Iscritto il: 25/03/12 16:04
Località: Avezzano

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: 427
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
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: gestire "Annulla" di inputbox

Postdi ramset1978 » 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
Ramset1978
Win 7 + Office 2010 Ita
ramset1978
Utente Senior
 
Post: 223
Iscritto il: 25/03/12 16:04
Località: Avezzano

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.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
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: 427
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.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


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


Chi c’è in linea

Visitano il forum: Marius44 e 57 ospiti