¿Cómo limpiar campos de distinto tipo con arreglo en VBA Excel?

Tengo un formulario en VBA en Excel, el cual cuenta con una serie de TextBox, ComboBox y CheckBox, los que debo limpiar de un plumazo; he probado una serie de opciones, los cuales no me funcionan de la forma que requiero. Necesito generar una función que pueda llamar desde cualquier formulario dentro del proyecto a través del evento clic de un botón, con la finalidad de limpiar en cada uno de dichos sus campos.

1 respuesta

Respuesta
2

H o l a: Para ilustrar mi ejemplo, voy a suponer que el formulario UserForm2 tiene los textbox, combobox y checkbox que se van a limpiar.

Para limpiar todos los textbox, combos y checks de un formulario, pon lo siguiente en un módulo:

Sub Limpiar_Controles_Del_Userform2()
'Por.Dante Amor
    'Limpia todos los textbox, combos y checks del formulario2
    For Each ctrl In UserForm2.Controls
        If TypeName(ctrl) = "TextBox" Or _
           TypeName(ctrl) = "ComboBox" Then
            ctrl.Value = ""
        ElseIf TypeName(ctrl) = "CheckBox" Then
            ctrl.Value = False
        End If
    Next
End Sub

Ahora, en cualquier formulario, puede ser el userform1 o el mismo userform2, pon el siguiente código en un botón:

Private Sub CommandButton2_Click()
    Call Limpiar_Controles_Del_Userform2
End Sub

Entonces, si estás ejecutando el UserForm1, y quieres limpiar los datos del Userform2, simplemente presionas el botón y los datos serán limpiados.

También puedes poner el botón en el UserForm2 y limpiará los datos del mismo UserForm2.


Si no quieres limpiar alguno de los controles, simplemente lo pones en una condición, por ejemplo:

Sub Limpiar_Controles_Del_Userform2()
'Por.Dante Amor
    'Limpia todos los textbox, combos y checks del formulario2
    For Each ctrl In UserForm2.Controls
        Select Case ctrl.Name
            Case "TextBox1", "ComboBox1"
            Case Else
                If TypeName(ctrl) = "TextBox" Or _
                   TypeName(ctrl) = "ComboBox" Then
                    ctrl.Value = ""
                ElseIf TypeName(ctrl) = "CheckBox" Then
                    ctrl.Value = False
                End If
        End Select
    Next
End Sub

En este caso el TextBox1 y el ComboBox1 no serán limpiados.


'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas