Condividi:        

excel 2003 macro per inserire un valore

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

excel 2003 macro per inserire un valore

Postdi scacco al re » 27/11/11 21:58

magari è banalissimo ma non riesco a trovare la soluzione.
tramite un msgbox con la scritta inserisci un numero voglio da tastiera digitare un numero e che me lo vada a mettere nella colonna p riga 7 del foglio2.
le condizioni sono che se digito 0 (zero) la macro termini senza inserirmi nessun dato, e se digito qualcosa che non è un numero intero positivo mi ripete la domanda di inserire un numero.
Grazie
scacco al re
scacco al re
Utente Senior
 
Post: 524
Iscritto il: 10/05/02 19:18
Località: Sestri Levante

Sponsor
 

Re: excel 2003 macro per inserire un valore

Postdi Anthony47 » 27/11/11 22:18

Forse invece del msgbox dovresti usare un "Inputbox"; tieni presente che viene restituita una stringa, se ti interessa un valore devi usare una conversione Stringa -->valore, es CInt (interi da -32k a +32k) o CDbl se ti interessano anche i decimali.

Guarda l' help on line dl vba alla voce "Funzione InputBox", che riporta anche un utilissimo esempio (anche se per farla elegante la fa un po' incasinata).

E se non ti basta lo spunto scrivi ancora.

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

Re: excel 2003 macro per inserire un valore

Postdi scacco al re » 28/11/11 09:03

Grazie per lo spunto,
io ho provato ad impostarla così (in maniera molto ortodossa)
Codice: Seleziona tutto
Sub prova()
        x = InputBox("Immetti un numero")
        If x = 0 Then
    MsgBox ("non si imposta nessun numero")
        ElseIf x < 0 Or x > 100 Then
        MsgBox ("riprova")
        'bisognrebbe inserire un loop che mi faccia tornare ad inizio macro (immetti un numero)
        Else
        Range("P7").Select
        ActiveCell.Value = x
        End If
End Sub
' manca anche il controllo che se inserisco del testo mi dica msgbox("non hai inserito un numero")
'e torni ad inizio macro (immetti un numero)

poi mi sono incartato....
scacco al re
scacco al re
Utente Senior
 
Post: 524
Iscritto il: 10/05/02 19:18
Località: Sestri Levante

Re: excel 2003 macro per inserire un valore

Postdi scacco al re » 28/11/11 10:10

sono riuscito a mettere il controllo sul formato numero
ma mi manca sempre il loop
Codice: Seleziona tutto
Sub prova()
        x = InputBox("Immetti un numero")
        If Not IsNumeric(x) Then      ' se il valore x non è un numero verrà visualizzato il messaggio
        MsgBox "Inserire solo numeri!", Title:="Errore"
        'bisognrebbe inserire un loop che mi faccia tornare ad inizio macro (immetti un numero)
        ElseIf x = 0 Then
        MsgBox "non si imposta nessun numero"
        ElseIf x < 0 Or x > 100 Then
        MsgBox "riprova", Title:="Errore"
        'bisognrebbe inserire un loop che mi faccia tornare ad inizio macro (immetti un numero)
        Else
        Range("P7").Select
        ActiveCell.Value = x
        End If
End Sub
scacco al re
scacco al re
Utente Senior
 
Post: 524
Iscritto il: 10/05/02 19:18
Località: Sestri Levante

Re: excel 2003 macro per inserire un valore

Postdi Flash30005 » 28/11/11 10:51

prova questa
Codice: Seleziona tutto
Sub prova()
        x = InputBox("Immetti un numero")
        On Error GoTo errore
        If x + 1 = 0 Then MsgBox "Testo"
        On Error GoTo 0
        If x = 0 Then
            MsgBox ("non si imposta nessun numero")
        ElseIf x < 0 Or x > 100 Then
            MsgBox ("riprova")
        Call prova
        'bisognrebbe inserire un loop che mi faccia tornare ad inizio macro (immetti un numero)
        Else
        Worksheets("Foglio2").Range("P7").Value = x
        End If
        Exit Sub
errore:
        MsgBox "non hai inserito un numero"
        Call prova
End Sub


Oppure aggiungendo la call alla tua macro avrai

Codice: Seleziona tutto
Sub prova2()
        x = InputBox("Immetti un numero")
        If Not IsNumeric(x) Then      ' se il valore x non è un numero verrà visualizzato il messaggio
        MsgBox "Inserire solo numeri!", Title:="Errore"
        Call prova
        'bisognrebbe inserire un loop che mi faccia tornare ad inizio macro (immetti un numero)
        ElseIf x = 0 Then
        MsgBox "non si imposta nessun numero"
        ElseIf x < 0 Or x > 100 Then
        MsgBox "riprova", Title:="Errore"
        Call prova
        'bisognrebbe inserire un loop che mi faccia tornare ad inizio macro (immetti un numero)
        Else
        Range("P7").Select
        ActiveCell.Value = x
        End If
End Sub

Ciao

P.s. E' opportuno indicare anche il foglio dove inserire il valore dell'Inpbox
altrimenti potresti scrivere sul foglio attivo che potrebbe non essere il Foglio2
quindi utilizzare
Codice: Seleziona tutto
       Worksheets("Foglio2").Range("P7").Value = x

invece di
Codice: Seleziona tutto
        Range("P7").Select
        ActiveCell.Value = x
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: excel 2003 macro per inserire un valore

Postdi Anthony47 » 28/11/11 11:12

Dovresti spiegare in dettaglio quali costrizioni vuoi applicare alla risposta, che puo' essere un valore "nullo" (Ok senza scrivere nulla, tasto Annulla, la X della finestra inputbox) oppure sintatticamente sbagliato (es "non so rispondere") oppure inferiore a zero, oppure pari a zero per scelta (risposto "0"), oppure positivo.
Sarei tentato di considerare il valore nullo pari allo "0", e lo gestirei con questa:
Codice: Seleziona tutto
Sub prova()
Replay:
On Error GoTo 0
        X = (InputBox("Immetti un numero (0-100)"))
        If X <> "" Then
        On Error GoTo Converr
        X = CDbl(X)
        Else: X = 0
        End If
        If X = 0 Then
    MsgBox ("non si imposta nessun numero")
        ElseIf X < 0 Or X > 100 Then
        MsgBox ("Numero tra 0 e 100; riprova"): GoTo Replay
        Else
        Sheets("Foglio2").Range("P7") = X
        End If
        Exit Sub
Converr:
    Resume Replay
End Sub

E' una soluzione molto simile a quella postata da Flash (vedi sopra), ma non usa recursivamente la macro quanto pittosto la ripresa della stessa macro usando Resume.

Ciao a tutti.
Avatar utente
Anthony47
Moderatore
 
Post: 19223
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: excel 2003 macro per inserire un valore

Postdi scacco al re » 28/11/11 23:17

le costrizioni sono che alla domanda inserisci un numero:
se si inserisce qualcosa di diverso da un numero lui mi avverte con messaggio NON HAI DIGITATO UN NUMERO e mi ripete la domanda di inserire un numero
se si inserisce un numero maggiore di 100 lui mi avverte dicendomi HAI INSERITO UN NUMERO TROPPO GRANDE e mi ripete la domanda di inserire un numero
se inserisco un numero minore di 0 lui mi avverte dicendo NUMERO TROPPO PICCOLO e mi ripete la domanda di inserire un numero
se inserisco 0 lui lui mi averte HAI DIGITATO ZERO, me lo fa mettere nella mia cella P7 del foglio2 e mi esce dalla macro.
se inserisco un numero compreso tra 1 e 100 me lo inserisce nella cella P/ del foglio2 senza nessun tipo di messaggio e termina la macro.
Alla domanda iniziale di inserire un numero se uno clicca su annulla la macro deve terminare senza nulla di fatto.
scacco al re
scacco al re
Utente Senior
 
Post: 524
Iscritto il: 10/05/02 19:18
Località: Sestri Levante

Re: excel 2003 macro per inserire un valore

Postdi ricky53 » 28/11/11 23:56

Ciao,
ho adattato alle tue necessità, che hai appena descritto, la proposta di Anthony provala e ...
Codice: Seleziona tutto
Sub Inserisci_Dati()
Replay:
    On Error GoTo 0
    X = (InputBox("Immetti un numero (0-100)"))
    If X <> "" Then
        On Error Resume Next
        X = CDbl(X)
    Else
        Exit Sub
    End If
    If X = 0 Then
        MsgBox ("Inserito zero")
    End If
    If X < 0 Or X > 100 Then
        MsgBox ("Inserire un umero tra 0 e 100")
        GoTo Replay
    End If
    Sheets("Foglio2").Range("P7") = X
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: excel 2003 macro per inserire un valore

Postdi Anthony47 » 29/11/11 00:23

Ciao Ricky, credo che la risposta piu' vicina alla domanda di scacco al re sia la macro PROVA di Flash.

Ciao a tutti.
Avatar utente
Anthony47
Moderatore
 
Post: 19223
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: excel 2003 macro per inserire un valore

Postdi ricky53 » 29/11/11 00:34

Ciao Anthony,
io sono partito dalla tua soluzione, ho letto le sue condizioni e le ho applicate e ... penso di averle riportate tutte ... ricontrollo per sicurezza.


. . . . . . . . . .
EDIT:
Controllato.
Le condizioni che lui chiede sono tutte soddisfatte.
Unica differenza: sono unite, con un solo diagnostico, le condizioni "minore di zero" e "maggiore di 100".
. . . . . . . . . .
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: excel 2003 macro per inserire un valore

Postdi Anthony47 » 29/11/11 12:20

Ricky, questa e' la reazione delle varie macro:
Codice: Seleziona tutto
  Risposta      Macro Anth              Vers Ricky         Macro Flash
Annulla:      Nessuna azione con msg  Nessuna azione     messaggio, retry
Ok con vuoto: Nessuna azione con msg  Nessuna azione     messaggio, retry
X:            Nessuna azione con msg  Nessuna azione     messaggio, retry
Impostato 0:  Nessuna azione con msg  Scritto 0 con msg  Nessuna azione con msg
Lettere:      msg di errore e retry   Msg errore retry   Messaggio errore e retry
Fuori range:  Msg e retry             Msg e retry        Msg e retry
Num valido:   Caricamento             Caricamento        Caricamento   

La differenza tra le varie macro e' minima ed e' concentrata sulla reazione ai tasti Annulla, X o risposta vuota.
Credo che comunque l' utente abbia sufficienti esempi per risolvere.

Ciao a tutti.
Avatar utente
Anthony47
Moderatore
 
Post: 19223
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: excel 2003 macro per inserire un valore

Postdi ricky53 » 29/11/11 12:45

Ciao Anthony,
ottima analisi delle varie soluzioni.

Tra le condizioni che io ho applicato mi era sfuggita quella di OK con vuoto ---- > e tu l'hai individuata.
Le altre mi sembrano siano rispondenti ai suoi "desiderata".
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


Torna a Applicazioni Office Windows


Topic correlati a "excel 2003 macro per inserire un valore":


Chi c’è in linea

Visitano il forum: Nessuno e 67 ospiti