¿Crear procedimiento para vaciar todos los textbox de cualquier formulario?

A tod@s!

Quiero crear una macro que me borre todos los textbox del formulario del que le llamo.

La idea es que este procedimiento este en un modulo y cuando pulse un botón en el formulario "AsitentesPDCA" o formulario "RegistroIndustrial" me borre todos los textbox.

Algo parecido a esto... Código que he creado y que no me funciona.

Sub LimpiarTextBox(NombreFormulario As MSForms.UserForm)
Dim contr As Control
For Each contr In NombreFormulario.Controls
If TypeName(contr) = "TextBox" Then
contr.Value = ""
End If
Next
End Sub

Gracias... Se agradece vuestra ayuda.

Atte: Valentin Buñuales

Respuesta
1

Quiero crear una macro que me borre todos los textbox del formulario del que le llamo.

Tu macro está bien.

Sub LimpiarTextBox(NombreFormulario As MSForms.UserForm)
  Dim contr As Control
  For Each contr In NombreFormulario.Controls
    If TypeName(contr) = "TextBox" Then
      contr.Value = ""
    End If
  Next
End Sub



La idea es que este procedimiento este en un modulo y cuando pulse un botón en el formulario "AsitentesPDCA" o formulario "RegistroIndustrial" me borre todos los textbox.

En un botón en cualquier formulario pon lo siguiente:

Private Sub CommandButton1_Click()
  Call LimpiarTextBox(Me)
End Sub

[Tienes pendiente valorar estas respuestas:

¿Cómo borrar registros duplicados en un array VBA?

¿Crear procedimiento para vaciar los items de un listbox de cualquier formulario?

¿Cuantas columnas tiene mi Array birideccional?

¿Como quitar duplicados de una columna en un Array Bidireccional VBA (Excel)?

[Sa lu dos y no olvides valorar las respuestas.

1 respuesta más de otro experto

Respuesta

En cada Userform tendrás un botón para llamar a la macro que te borraré de contenido los controles que indiques, en tu caso solo los TextBox.

Private Sub CommandButton1_Click()
Call LimpiarTextBox(UF_Configuracion)     'en cada UF coloca el nombre correspondienterform
End Sub

Y en un módulo la macro común a todos los UF:

Sub LimpiarTextBox(NombreFormulario As MSForms.UserForm)
Dim contr As Control
For Each contr In NombreFormulario.Controls
    If TypeName(contr) = "TextBox" Then
        contr.Value = ""
    End If
Next
End Sub

Sdos y no olvides valorar la respuesta.

Hola Elsa!

Gracias por contestar a mi pregunta...ahora bien hay algo que se me escapa.

Si pongo esto: Call LimpiarTextBox(AsistentesReunionesPDCA)

Fallo: Tipo de argumento ByRef no coincide

Si pongo esto: Call LimpiarTextBox(AsistentesReunionesPDCA)

Si pongo esto: Call LimpiarTextBox(AsistentesReunionesPDCA_Configuracion)

Sale el mismo fallo : Tipo de argumento ByRef no coincide ...llamando a este procedimiento que esta en un modulo .

Sub LimpiarTextBox(NombreFormulario As MSForms.UserForm)
Dim contr As Control
For Each contr In NombreFormulario.Controls
If TypeName(contr) = "TextBox" Then
contr.Value = ""
End If
Next
End Sub

Elsa que es lo que me falla?

Un saludo!

Yo tenía un formulario que se llamaba UF_Configuración y ese es el nombre que utilicé en la instrucción para llamar a la macro de limpieza:

Private Sub CommandButton1_Click()
Call LimpiarTextBox(UF_Configuracion)     'en cada UF coloca el nombre correspondienterform
End Sub

Si tienes varios formularios que van a utilizar la misma macro de limpieza entonces bien podrías utilizar la expresión ME en lugar del nombre de cada uno:

Private Sub CommandButton3_Click()
Call LimpiarTextBox(Me)     'en todos los UF se utilizará la misma instrucción
End Sub

Ahora, debes insertar un módulo y allí copiar la macro que dejaste en negrita. Yo le cambié el texto del argumento para que veas que puedes colocar cualquier texto allí. 

Sería como decirle a Excel: 'MiFormulario' es = al nombre del formulario que me llamó.

Y luego en el recorrido de los controles debes utilizar el mismo texto.

Sub LimpiarTextBox(MiFormulario As MSForms.UserForm)
Dim contr As control
'por cada control del formulario que llama a esta macro
For Each contr In MiFormulario.Controls
    If TypeName(contr) = "TextBox" Then    'si es un control TextBox lo vaciará
        contr.Value = ""
    End If
Next
End Sub

Espero haber sido clara sino me consultas nuevamente. 

Sdos y Feliz Año!

Habiéndote enviado macro de ejemplo igual a la que 2 días después te enviara otro experto, no comprendo porqué no la puedes hacer correr.
Si el tema quedó comprendido agradeceré valores también mi respuesta, sino comenta para agregar más aclaraciones.

Sdos!

Tengo aún esta consulta que me sigue apareciendo en mi historial como 'consulta pendiente'.
Si el tema ya está resuelto agradeceré que marques alguna valoración atenta al tiempo dedicado y a lo comentado anteriormente.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas