Hola a todos!.
Hoy me gustaría dejaros un par de códigos para borrar el contenido de los controles de formulario, tanto aquellos que se insertan en la hoja excel como aquellos que insertamos en nuestros userform o formularios en el editor de VBA.
Voy a comenzar con los controles insertados en una hoja (controles ActiveX), por ejemplo una en la que tengamos varios: Textbox, ComboBox, ListBox y CheckBox. Para que podamos automatizar el proceso de forma óptima debemos utilizar la instrucción Select Case:
Sub LIMPIAR_CONTROLES()
With ActiveSheet
'Por cada objeto que indiquemos en el select case, borramos contenido
For Each Control In .OLEObjects
Select Case TypeName(Control.Object)
Case "TextBox"
Control.Object.Text = vbNullString
Case "ComboBox"
Control.Object.Clear
Case "ListBox"
Control.Object.Clear
Case "CheckBox"
Control.Object.Value = False
End Select
Next Control
End With
End Sub
Dado que estamos trabajando con controles ActiveX debemos tratar en nuestro código con los objetos OLEObject, que son los que nos van a permitir interactuar con nuestra hoja. A continuación solo tendremos que especificar el tipo de objeto y la forma en la que debemos limpiarlo o vaciarlo en el Select – Case.
Con los Formularios o Userforms resulta más sencillo, dado que haremos referencia a la colección Controls. El resultado del código es similar al anterior:
Private Sub CommandButton1_Click()
'Por cada objeto que indiquemos en el select case, borramos contenido
For Each Control In Me.Controls
Select Case TypeName(Control)
Case "TextBox"
Control.Text = vbNullString
Case "ComboBox"
Control.Clear
Case "ListBox"
Control.Clear
Case "CheckBox"
Control.Value = False
End Select
Next Control
End Sub
Como podéis ver, ambas estructuras son idénticas (salvo por la forma de hacer referencia a los controles de formulario).
Dado que se trata de fragmentos de código bastante específicos y sencillos, considero que no requieren un archivo de ejemplo. Os invito a que los probéis en vuestros proyectos : )
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.
¡¡Muchas gracias!!
Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies
Para usarlo en el evento de un control está genial. He buscado otras formas para poder hacer una solución de forma tal que se pueda implementar como «Public Function» y poder instanciarla desde cualquier formulario dentro de una archivo xlsm, pero no lo he podido lograr hasta ahora. Sigo buscando
Saludos Armando, Un abrazo!
Saludos nuevamente:
En la línea donde dice «For Each Control In Me.Controls» se produce un error en la programación con VBA, el cual dice que no se puede utilizar la palabra clave «Me», ya que no es válido.
Para estos casos solo estoy reemplazándola por el nombre del formulario, lo que me lleva a generar una función por cada formulario que posea mi archivo, lo que me invalida el tema de herencia (POO).
Lo que indicas lo puedes hacer con otro for each vinculado con un array. tipo esto: For Each consulta In Array(aquí nombre cada formulario).
For Each Control UEDA INDICADO COMO ERROR DE NO SE DA DEFINIDO VARIABLE
Hola Acevedo, puedes intentar sustituir el Me. por el nombre del formulario. Debería de solucionarse el problema.
Saludos.
Excelente esta ayuda. Mi pregunta es: ¿Y qué hacer para que un botón (control de formulario) funciones en una hoja de Excel protegida? Agradeceré su ayuda
Adiciono algo: El botón (control de formulario no está asociado a una celda si no que está vinculado a una macro (asignar macro).
No sé a que te refieres, pero lo normal es que cuando trabajamos con hojas protegidas con macros, desabilitemos temporalmente la contraseña realicemos nuestro trabajo y luego se vuelve a proteger.
Saludos.
Hola,
yo quiero eliminar, además de los xxxbox, las imágenes que he cargado en el formulario. Cómo debería hacerlo?
En este post puedes ver cómo se hace en una hoja, inténtalo ahora con un userform:
https://excelsignum.com/2016/10/12/eliminar-todas-las-imagenes-formas-de-una-hoja-o-un-libro-en-excel-con-vba/