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