Applicazione di desktop publishing di Microsoft incentrata sul layout di pagina e sulla progettazione grafica.
Ciao Mauro e grazie dei chiarimenti, comunque ho visto che gestire su più textbox-data diventa caotico, almeno per me, come al solito le date in excel, sia se si tratti di formule o VB, mi mandano al manicomio :-(( ;
Un'idea, poi decidi tu. Ti ho comunque risposto nell'altro thread per ciò che riguarda le ComboBox.
Nella UserForm ho 10 TextBox e voglio controllare la data nei termini richiesti solo nelle TextBox2, 5, 7.
Creo una Collection delle TextBox2, 5, 7 e valuterò solo quelle. Se le TextBox hanno una data o sono vuote, chiudo la UserForm, altrimenti mi posiziono sulla TextBox con errore:
Private Sub CommandButton1_Click()
On Error GoTo RigaErrore
'dichiaro le variabili
Dim col As Collection
Set col = New Collection
Dim bln As Boolean
Dim v As Variant
Dim s() As String
'creo una collection con le TextBox
'che devo controllare(qui TextBox2,5,7)
With Me
col.Add .TextBox2, "TextBox2"
col.Add .TextBox5, "TextBox5"
col.Add .TextBox7, "TextBox7"
End With
'controllo il contenuto delle TextBox
For Each v In col
'se la cella è vuota non ha
'importanza quindi non scateno
'errori
If v.Text <> "" Then
'*splitto* il contenuto
s = Split(v.Text, "/")
'controllo che ci sia un mese valido
'(ma potrei controllare anche giorni,
'mesi e anni)
If s(1) <= 12 Then
'nell'esempio se la data è valida
'la scrivo nella cella attiva
ActiveCell.Value = CDate(v.Text)
Else
'imposto a True la variabile
bln = True
'se il valore non è valido
'una MsgBox
MsgBox "Valore non valido."
'seleziono il contenuto della cella
v.SelStart = 0
v.SelLength = Len(v.Text)
v.SetFocus
End If
End If
Next
'riga sempre eseguita
RigaChiusura:
'Set a Nothing delle variabili oggetto
Set col = Nothing
'se bln ha valore False(non ci sono
'errori nelle TextBox), chiudi
'la UserForm
If bln = False Then Unload Me
Exit Sub
'in caso d'errore
RigaErrore:
'imposto a True la variabile
bln = True
'MsgBox
MsgBox "Valore non valido."
'seleziono il contenuto della cella
With v
.SelStart = 0
.SelLength = Len(.Text)
.SetFocus
End With
Resume RigaChiusura
End Sub
Si potrebbe anche indicizzare il tutto evitando la Collection, ma quest'ultima ti lascia libertà sui nomi da assegnare alle TextBox. Immagino sia intuitivo come modificare i nomi delle TextBox controllate e puoi aggiungere quelle che vuoi.
Mauro Gamberini - Microsoft© MVP(Excel) - http://www.maurogsc.eu/