Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Ivo,
Aggiungerei che, senza interventi correttivi, la sequenza dei controlli restituiti dal ciclo ForEach..Next rifletterà l'ordine cronologico in cui i controlli vengono aggiunti alla Userform, indipendentemente dall'ordine TabIndex successivamente assegnato ai controlli.
Questo comportamento, e una soluzione alternativa, sono dimostrati nel mio file prova Ivo20230201.xlsm
che include il seguente codice:
'========>>
Option Explicit
'-------->>
Private Sub CommandButton1_Click()
Dim Ctrl As MSForms.Control
Dim i As Long
Dim maxIndex As Long
Dim oControls\_Dic As Object
Set oControls\_Dic = CreateObject("Scripting.Dictionary")
'\\ Add controls to dictionary, key by tabindex property
For Each Ctrl In Me.controls
With Ctrl
maxIndex = IIf(maxIndex < .TabIndex, .TabIndex, maxIndex)
oControls\_Dic.Add .TabIndex, Ctrl
End With
Next Ctrl
'\\ Place controls in order
Debug.Print vbNewLine & "CommandButton1 Results:"
Debug.Print "\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_"
For i = 0 To maxIndex
With oControls\_Dic
If .exists(i) Then
If TypeName(.Item(i)) = "TextBox" Then
If Not IsEmpty(.Item(i).Value) Then
ActiveSheet.Range("A1").Offset(0, i).Value = CDbl(.Item(i).Value)
Debug.Print .Item(i).Name & vbTab & .Item(i).TabIndex
End If
End If
End If
End With
Next i
Debug.Print "#############"
End Sub
'-------->>
Private Sub CommandButton2_Click()
Dim Ctrl As MSForms.Control
Debug.Print vbNewLine & "For Each ...Next Results:"
Debug.Print "\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_"
Debug.Print
For Each Ctrl In Me.controls
If TypeName(Ctrl) = "TextBox" Then
Debug.Print Ctrl.Name & vbTab & Ctrl.TabIndex
End If
Next Ctrl
Debug.Print "#############"
End Sub
'<<========
Avviando la Userform e facendo clic sui i due controlli CommandButton, ottengo il seguente report nella finestra immediata:
[![](https://learn-attachment.microsoft.com/api/attachments/3ad8137c-58ff-426f-826e-098527ff321d?platform=QnA
Inoltre, compilando i tre controlli TextBox, i loro dati vengono copiati nel intervallo A1:C1 nella sequenza desiderata:
[![](https://learn-attachment.microsoft.com/api/attachments/3eb6b392-565a-4e50-978b-5df13091fb41?platform=QnA
===
Regards,
Norman