Macro en un Módulo para varios formularios

Esta, Dante Amor

Sub Limpar(miform) 'para varios Formularios
'Recorremos todos los controles TextBox y ComboBox del formulario que enviamos
    For Each wcontrol In miform.Controls
'Filtramos solo aquellos de tipo TextBox y ComboBox
        If TypeOf wcontrol Is MSForms.TextBox Then
        If TypeOf wcontrol Is MSForms.ComboBox Then
            wcontrol.Text = ""
        End If
    Next wcontrol
    MsgBox "Se ha cambiado", vbInformation, "Limpieza"
End Sub

 Dante Amor, Al abrir el formulario y seleccionar la hoja mediante un Combo, me dice:

La idea es tener esta para usar desde un módulo llamando Call Limpiar(Me) por un butón en cada formularios

2 Respuestas

Respuesta
1
Sub Limpar(miform) 'para varios Formularios
'Recorremos todos los controles TextBox y ComboBox del formulario que enviamos
    For Each wcontrol In miform.Controls
'Filtramos solo aquellos de tipo TextBox y ComboBox
        If TypeOf wcontrol Is MSForms.TextBox Then
        If TypeOf wcontrol Is MSForms.ComboBox Then
            wcontrol.Text = ""
        End If
    Next 
    MsgBox "Se ha cambiado", vbInformation, "Limpieza"
End Sub

solo deja el next

Hola Nestor

Sigue el Next sin For

Analizando el código detenidamente, es mejor en una función

aun que te diga que next sin for realmente faltaba cerrar un endif

Y así nunca se cumple la condición estabas preguntando si el control es un texbox y un combobox

Las condiciones deben estar separada de esta manera

Public Function Limpiar(miform As UserForm) 'para varios Formularios
'Recorremos todos los controles TextBox y ComboBox del formulario que enviamos
For Each wcontrol In miform.Controls
'Filtramos solo aquellos de tipo TextBox y ComboBox
If TypeOf wcontrol Is MSForms.TextBox Then
wcontrol.Text = ""
End If
If TypeOf wcontrol Is MSForms.ComboBox Then
wcontrol.Text = ""
End If
Next
End Function

Private Sub CommandButton1_Click()
x = Limpiar(UserForm1)
End Sub

Respuesta
1

Así quedaría :

Sub Limpar(miform) 'para varios Formularios
'Recorremos todos los controles TextBox y ComboBox del formulario que enviamos
    For Each wcontrol In miform.Controls
'Filtramos solo aquellos de tipo TextBox y ComboBox
        If TypeOf wcontrol Is MSForms.TextBox Then
            wcontrol.Text = ""
        End If
        If TypeOf wcontrol Is MSForms.ComboBox Then
            wcontrol.Text = ""
        End If
    Next wcontrol
    MsgBox "Se ha cambiado", vbInformation, "Limpieza"
End Sub

sal u dos

Hola Dante, ¿Como te va amigo

Dam, me dice

y me acusa en la macro que ves en la linea señalada

H o l a Amigo, me va bien, gracias por preguntar.

Me enteré lo de tu hijo, lo lamento.

.

Regresando al código. El error que te aparece es porque el dato que pusiste en el combo lo está tomando como nombre de hoja y la hoja no existe.

Deberías ajustar el evento change del combo para verificar que estés tomando un dato del combo. Eso lo puedes lograr con la propiedad del combo style, selecciona la opción frmstyledropdownlist

También, antes de establecer la hojatrabajo, deberías verificar si la hoja existe. Para eso ya te he enviado rutinas para verifica si la hoja existe.

Son temas diferentes a lo que pusiste en tu pregunta, sabes que con gusto te ayudo con todas tus peticiones pero deberás enviar una petición por pregunta.

Saludos y recibe un fuerte abrazo de mi parte.

Hola Dam

SI, las hojas están todas las mencionadas en el Combo con sus nombres correctamente

Con esta macro (si no me equivoco es tuya) funciona mui bien para los TextBox

Sub Limpar(miform)
'Recorremos todos los controles TextBox del formulario que enviamos
    For Each wControl In miform.Controls
'Filtramos solo aquellos de tipo TextBox
        If TypeOf wControl Is MSForms.TextBox Then
            wControl.Text = ""
        End If
    Next
End Sub

Pero quisiera agregarle los Combos

Pero cuando limpias el combo se activa el evento change del combo, entonces estableces en hojatrabajo en blanco, por eso el error. Lo que debes califar es que si el combo iguañ a blanco se salga de la función.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas