Utilizzare le InputBox per inserire/modificare dati sul Foglio di lavoro.

Funzione InputBox : Visualizza un messaggio in una finestra di dialogo (vedi), attendendo che l'utente immetta del testo o scelga un pulsante, quindi restituisce un valore String che include il contenuto della casella di testo.

Aggiornamento 02/10/16 per il Metodo InputBox

Spesso vorremmo disporre, per introdurre dati su determinate celle del foglio di lavoro, di una maschera che raccolga il dato da immettere, e lo "scarichi" poi in una cella per attivare le procedure presenti sul foglio stesso. Queste maschere di introduzione dati, altro non sono che "Finestre di Dialogo" (le ImputBox).

Ecco una semplice routine, da inserire in un modulo e da associare ad un pulsante che attivi l'InputBox. Nell'esempio utilizzo la Cella A1 come destinazione del dato inserito, potrete modificare il riferimento per la cella che più vi aggrada. In verde sono i commenti :

Sub Richiesta()
Dim Message, Title, MyValue

'sotto: Imposta il messaggio.
Message = "Inserisci Quel che Vuoi :"
Title = "Inserimento Dati"
' Imposta il titolo.

' Visualizza il messaggio, il titolo
MyValue = InputBox(Message, Title)
If MyValue <> "" Then
'se l'inputbox è diverso da vuoto
Range("A1").Value = MyValue 'allora copia in A1 il testo
End If
End Sub

E' possibile utilizzare la stessa InputBox per inserire più dati in celle diverse, se i dati corrispondono a valori predeterminati. Ipotizziamo di dover introdurre 3 tipi di dati condizionali (SE) in tre diverse celle. In A1 vorremo numeri solo SE compresi tra 1 e 100, in A2 sempre numeri solo SE compresi tra 200 e 300, ed infine in A3 vorremo dati solo SE sono testo. Ricordo che, anche qui, i riferimenti e i valori condizionali potranno essere adattati alle vostre esigenze, compreso l'inserimento, tramite ElseIf ......Then di nuove istruzioni prima di End If.

Sub multi()
Dim Message, Title, MyValue
Message = "Inserisci Quel che vuoi :"
Title = "Inserimento Dati"

MyValue = InputBox(Message, Title)
If MyValue >= 1 And MyValue <= 100 Then
Range("A1").Value = MyValue

ElseIf MyValue >= 200 And MyValue <= 300 Then
Range("A2").Value = MyValue

ElseIf MyValue <> IsNumeric(MyValue) Then
Range("A3").Value = MyValue


End If
End Sub

Utilizzare le InputBox ci consente quindi di "reperire dati" (valori, date, testo) da utilizzare in qualunque contesto si voglia : all'interno di routine per assegnare valori a delle variabili, oppure per inserire o modificare dati presenti in celle di un foglio di lavoro. Un altro semplice esempio può essere quello di usare due InputBox per modificare il valore di una cella, aggiungendo o togliendo valori (come in un carico e scarico di giacenze di un magazzino). Usiamo la cella  D1 come esempio, ed usiamo la dizione breve per chiamare le InputBox:

Sub Carica

'dichiariamo la variabile "carico" come vettore del valore da aggiungere

carico = InputBox("Inserisci la quantità da caricare")

'per evitare l'errore "Tipo non Corrispondente" se non scriviamo niente o premiamo il pulsante "Annulla" sulla InputBox, useremo questa istruzione sotto:

If carico = "" Then Exit Sub '(se carico è vuoto o nullo si esce dalla routine)

'qui e poi necessario dichiarare il "tipo" di valore che intendiamo trasferire; potremo usare 'un generico Val(carico), ma in questo caso il valore rappresentato da "carico" "passerebbe" solo se/o come numero intero. Nel caso di numeri decimali, sarà meglio 'usare il formato Double (CDbl). Quindi si renderà il valore presente nella cella D1 uguale a questo stesso valore più il valore rappresentato da "carico"

Range("D1").Value = CDbl(carico) + Range("D1").Value

End Sub

 

Per lo scarico useremo un'altra istruzione (non ripeto i commenti)

Sub Scarica

scarico = InputBox("Inserisci la quantità da scaricare")

If scarico = "" Then Exit Sub

Range("D1").Value =  Range("D1").Value - CDbl(scarico)

End Sub

 

 Aggiornamento ott 2016

Application.InputBox, metodo :  Visualizza una finestra di dialogo per l'input dell'utente. Restituisce le informazioni immesse nella finestra di dialogo.

A volte non guardiamo completamente tutte le informazioni che la guida in linea di Excel ci fornisce quando cerchiamo qualcosa, è questione di pigrizia o forse di fretta nel voler risolvere un problema, e qualche volta di ignoranza; ma anche io mi lascio prendere dalla fretta, e così mi sono perso qualcosa di interessante circa l'uso delle InputBox : quando sfogliamo la guida in linea, nella sintassi da utilizzare con le InputBox (Metodo) vediamo una serie di parametri (racchiusi tra parentesi) che sono opzioni che a volte possono modificare o anche stravolgere l'effetto che otterremo citandole, la sintassi esatta è: espressione.InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextID, Type)

Alcune opzioni sono necessarie altre sono facoltative, il parametro Type ad esempio, contiene diverse possibilità (valori) che restituiscono significati diversi:

Valore Significato
0 Una formula
1 Un numero
2 Del testo (una stringa)
4 Un valore logico (True o False)
8 Un riferimento di cella, ad esempio un oggetto Range
16 Un valore di errore, ad esempio #N/D
64 Una matrice di valori

Utilizzare InputBox per visualizzare una finestra di dialogo semplice in cui immettere i dati da utilizzare in una macro. La finestra di dialogo conterrà un pulsante OK e un pulsante Annulla. Se si sceglie OK, InputBox restituirà il valore immesso nella finestra di dialogo. Se si sceglie Annulla, InputBox restituirà False. Se Type è uguale a 0, InputBox restituirà la formula sotto forma di testo, ad esempio "=2*PI()/360". Se la formula contiene riferimenti, questi verranno restituiti come riferimenti di tipo A1. Per eseguire conversioni tra gli stili di riferimento, utilizzare ConvertFormula. Se Type è uguale a 8, InputBox restituirà un oggetto Range. È necessario utilizzare l'istruzione Set per assegnare il risultato a un oggetto Range, come mostrato nell'esempio che segue.

         Set myRange = Application.InputBox(prompt := "Sample", type := 8)

questa sarà la finestra che appare lanciando le istruzioni sopra

  se con la finestra aperta, selezioneremo un intervallo di celle, l'intervallo sarà rilevato e memorizzato nella variabile myRange, come nella seguente foto:

e visto che la variabile myRange excel la vede come un "oggetto", sarà possibile relazionarci all'oggetto con istruzioni come oggetto.Select, oggetto.Address, oggetto.Offset ecc. ecc.(chiaramente in questo esempio l'oggetto è myRange quindi, per i nubbi, myRange.Select, myRange.Address, myRange.Offset)

A volte gli esempi della guida sono abbastanza ermetici, spiegano si l'argomento, ma spesso mancano di esempi applicabili su come si possono usare gli esempi stessi; quindi facciamo un esempio per noi poveri pellegrini e commentiamolo: supponiamo di voler ottenere la somma dei valori dell'intervallo reperito con il metodo InputBox, potremmo usare una variabile come destinazione della somma con istruzione simile:

    AA = Application.Sum(myRange)      per poi elaborarla ulteriormente o destinarla ad una cella del foglio, magari a lato dell'intervallo stesso, così:

    myRange.Select                                'selezioniamo tutto l'intervallo memorizzato in myRange
    ActiveCell.Offset(0, 1) = AA            'ma usiamo la dizione ActiveCell per spostarsi di una colonna, a lato della prima cella dell'intervallo, (per evitare che la somma finisse in tutte le celle a lato dell'intervallo), e scriviamo la somma.

 

il tutto funziona egregiamente, ma rimane un problema : se i valori contenuti nell'intervallo vengono variati, la somma ricavata precedentemente non si aggiorna, questo perchè la scrittura è avvenuta per il lancio di istruzioni vba e quindi non esiste un collegamento che aggiorni automaticamente la somma, a meno che non vengano rilanciate le stesse iistruzioni; a volte questo "rilanciare la istruzioni" non appare cosa gradita.

esiste quindi la soluzione: inserire nella cella destinata a contenere la somma, una formula residente con la funzione SOMMA(), vediamo come: basta modificare la sola riga finale appena vista, così:

   ActiveCell.Offset(0, 1).Formula = "=SUM(" & AA & ")"

 e quando anche uno solo dei valori cambierà, automaticamente la somma si aggiornerà. Vediamo la routine completa:

   Sub eccolo()
      Set myRange = Application.InputBox(prompt:="Sample", Type:=8)
      AA = Application.Sum(myRange)
      myRange.Select
      ActiveCell.Offset(0, 1).Formula = "=SUM(" & AA & ")"
   End Sub

Un simpatico modo per generare intervalli al momento.

 

 


 

Buon lavoro.

prelevato sul sito http://ennius.interfree.it