Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

inputbox numerico e date ripetuto 3 volte

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

inputbox numerico e date ripetuto 3 volte

Postdi miko » 30/05/13 20:16

buona sera,
consultando argomenti ed alcuni topic del forum relativi all'inputbox, ho realizzato una macro;
La routine svolge il seguente lavoro:
un primo inputbox richiede solo alcuni valori numerici, definiti a priori;
premendo il tasto annulla, qualunque sia il valore inserito nel box, si esce dalla routine;
se non viene inserito alcun valore, oppure viene inserito lo zero od una lettera,
e si preme il tasto ok, compare un messaggio che avvisa dell'errore e si ripete l'input;
in questo caso ho impostato la ripetizione del procedimento per 3 volte, perciò in caso di errore si
presenta lo stesso inputbox per 3 volte;
al terzo errore si esce dalla routine.
Se il valore inserito nel primo inputbox corrisponde ad uno dei numeri richiesti,
la routine richiama un secondo inputbox che richiede una data, che deve rispettare alcuni requisiti
nel senso che la stringa richiesta deve avere una precisa lunghezza in modo da escludere formati date
differenti.
Anche con questo inputbox si ripete l'identico procedimento del primo, relativo al tasto annulla,
alla comparsa dello stesso inputbox in caso di errore etc.
Se la data inserita è corretta, i valori inseriti nei 2 inputbox vengono scritti tramite ciclo in alcune celle.
La macro funziona, ma ho tuttavia alcuni dubbi sulla necessità e/o validità di alcune linee di codice.

Codice: Seleziona tutto
Sub Scrivi_Modulo()
Dim Num As Variant ' Integer
Dim strDATA As Variant 'String
Dim Msg As String
Dim Title As String
Dim Default As String

Application.ScreenUpdating = False
Application.Calculation = xlManual

ContaN = 0
  Msg = vbNewLine & vbNewLine & _
       "         INSERIRE SOLO UNO DEI SEGUENTI VALORI." _
       & vbNewLine & vbNewLine & _
       "                            1  -  2  -  3  -  4  -  5"

  Title = "                      INSERISCI IL NUMERO"
  Default = "3"

InsertNum:
Num = Application.InputBox(Msg, Title, Default)

 ContaN = ContaN + 1
    If Num = False And VarType(Num) = vbBoolean Then Exit Sub  'LINEA 1 <<<<<<<<
       
      If Not IsNumeric(Num) Or Num = 0 Then
         If ContaN = 3 Then Exit Sub
           MsgBox "NON HAI INSERITO I VALORI CORRETTI" _
                  & vbNewLine & vbNewLine & _
              "      VERIFICARE I VALORI INSERITI", 0 + vbCritical, _
              "                      ATTENZIONE"
           GoTo InsertNum
           
      ElseIf Num = 1 Or Num = 2 Or Num = 3 Or Num =4 _
         Or Num = 5 Then
         GoTo DATA
      End If

DATA:
ContaD = 0
  Msg = vbNewLine & vbNewLine & _
       "      INSERISCI LA DATA NEL FORMATO GG-MM-AAAA" _
       & vbNewLine & vbNewLine & _
       "    SEPARANDO LE CIFRE CON SPAZIO,  -  ,  O CON   /"

  Title = "                        INSERISCI LA DATA"
  Default = (Format(Now(), "dd-mm-yyyy"))
InsertData:
        strDATA = Application.InputBox(Msg, Title, Default)
         
       ContaD = ContaD + 1
        If strDATA = False Then Exit Sub 'And VarType(strDATA) = vbBoolean Then 'LINEA 2 <<<<<<
                 
      If Not IsDate(strDATA) Or strDATA = "" Then  'LINEA 3 <<<<<<<<
          If ContaD = 3 Then Exit Sub
             MsgBox "SPIACENTE DATA ERRATA, RIPROVA L'INSERIMENTO." _
                    & vbNewLine & vbNewLine & _
                    "       INSERISCI LA DATA NEL FORMATO GG/MM/AA" _
                    & vbNewLine & vbNewLine & _
                    "    SEPARANDO LE CIFRE CON SPAZIO,  -  ,  O CON   /" _
                    , 0 + vbCritical, "                                ATTENZIONE"
     
             GoTo InsertData
                 
      ElseIf Len(strDATA) = 6 Or Len(strDATA) = 8 _
           Or Len(strDATA) = 9 Or Len(strDATA) = 10 Then
         
         With Worksheets("Foglio1")
            .Columns("C:C").ClearContents
             UREFine = .Range("C" & Rows.Count).End(xlUp).Row
           
             I = 1
              For K = UREFine To 3000 Step 3
                .Cells(K, 3).Value = "Modulo" & "  " & Num & "ª" _
                & "    " & "Del" & "  " & strDATA & "    " & "Foglio" & "  " & "N°" & " " & I
                I = I + 1
              Next K
         End With
          Exit Sub
   End If

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

Ho notato che le variabili dei 2 inputbox devono essere dichiarati VARIANT, se scommento integer o string la macro non funziona.
Non capisco l'utilità alla linea 1 del codice ... VarType(Num) = vbBoolean ..., trovato in rete, che se eliminato non modifica il funzionamento della macro;
mentre il codice ... VarType(strDATA) = vbBoolean ...alla linea 2, se inserito provoca errore;
inoltre se nell'inputbox della data viene inserito lo zero, questo non viene riconosciuto alla linea 3 ma alla linea 2, cioè come valore false ed esce dal ciclo, mentre vorrei che si ripetesse il ciclo per correggere l'inserimento.
Poichè nel primo input è richiesto un valore numerico ben determinato, vorrei escludere quei valori che non rispettano la condizione, ed in caso di digitazione errata far ricomparire l'inputbox 3 volte come negli altri casi.
I miei tentativi di introdurre questa condizione hanno prodotto solo errore.
Analogo discorso per l'inputbox delle date.
grazie, saluti
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Sponsor
 

Re: inputbox numerico e date ripetuto 3 volte

Postdi Anthony47 » 30/05/13 21:37

E' sempre dura commentare un codice scritto da altri...
Num deve essere Variant perche' potrebbe contenere anche dei valori logici, che ovviamente non sono Integer.

Per quanto riguarda linea1-2-3 guarda questo chiarimento pubblicato da scossa: viewtopic.php?p=564383#p564409
Poiche' le tua istruzioni usano la conversione implicita della variabile compilata dall' inputbox la verifica di vartype aggira eventuali errori di conversione.

Ciao
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: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: inputbox numerico e date ripetuto 3 volte

Postdi miko » 30/05/13 22:17

ciao,
è proprio il topic che hai indicato, e che avevo dimenticato, che mi ha suggerito la macro in uso.
non riesco però a modificarla per ottenere un buon risultato.
immagino che lavorare su altre macro è sempre più complicato che progettarle ex novo.
ti chiedo allora come imposteresti una macro che svolga queste funzioni:
1) un inputbox solo numerico e che accetti solo i numeri 1-2-3-4-5;
2) se si inserisce un valore diverso compare un messaggio e si ripete l'inserimento
3) premendo il tasto annulla, qualunque sia il valore inserito si esce dalla routine;
4) se il valore inserito è corretto si passa all'inputbox delle date
5) anche qui devono essere validi i punti 2) e 3) precedenti.
grazie e saluti
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: inputbox numerico e date ripetuto 3 volte

Postdi Anthony47 » 31/05/13 01:27

Forse pero' la via piu' semplice sarebbe quella di usare una userform con una casella di riepilogo in cui scegliere il numero, due oggetti calendar da cui scegliere le date, un pulsante Cancella e uno Fatto. L' idea che basta IsDate(strDATA) per affermare che quella e' la data giusta e' un po' ottimistica...
Prova e poi ti aiuteremo a completare la programmazione dell' oggetto (non ricordo se su questo fronte hai una conoscenza specifica o se serve aiuto anche per cominciare).

Ciao
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: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: inputbox numerico e date ripetuto 3 volte

Postdi miko » 14/06/13 20:30

salve,
la tua è stata una ottima idea.
nel poco tempo libero che ho avuto ho studiato i controlli che hai suggerito e sto realizzando
il progetto.
il tuo modo di procedere è anche più efficiente di quello che avevo incominciato a creare,
non dovendo digitare i dati ogni volta.
ciao e grazie del suggerimento
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44


Torna a Applicazioni Office Windows


Topic correlati a "inputbox numerico e date ripetuto 3 volte":


Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti