¿Es posible optimizar el siguiente código?

¡Hola Mundo!

Estoy iniciándome en el desarrollo con VBA y como todo novato autodidacta puedo lograr comprender rutinas complejas, sin embargo, también puedo desconocer simplezas (que entorpecen el desarrollo) y que sólo el preguntar, la experiencia o un curso bien estructurado aclaran. Mi inquietud...

¿Es posible optimizar el siguiente código?

Private Sub Frame1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     ComboBox1.BorderColor = &HACCFFA
     ComboBox1.BorderColor = &HACCFFA
     TextBox1.BorderColor = &HACCFFA
     TextBox2.BorderColor = &HACCFFA
     TextBox3.BorderColor = &HACCFFA
End Sub

Es decir, cómo puedo evitar tener que escribir

.BorderColor = &HACCFFA

para cada control. Se me ha ocurrido que tal vez existe una especie de

With objeto
    [instrucciones]
End With

pero a la inversa (con las propiedades en lugar de con el objeto).

Ojala alguien me pueda despejar esta duda. Saludos.

1 respuesta

Respuesta
1

Te mando un ejemplo para optimizar el código.

Con esta macro tratamos de forma conjunta a todos los combobox que tengas en tu form.

Estamos modificando el backcolor de TODOS los combobox para cambiarlo a rojo, sin necesidad de pasar uno a uno. En este ejemplo estoy utilizando el evento INITIALIZE que se dispara al arrancar el formulario.

Private Sub UserForm_Initialize()
For Each ctrl In Me.Controls
If TypeName(ctrl) = "ComboBox" Then
ctrl.BackColor = &HFF&
End If
Next
End Sub

no olvides finalizar la consulta

Muchas gracias, es justo lo que necesitaba.

Private Sub Frame1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     For Each ctrl In Me.Controls
         If TypeName(ctrl) = "ComboBox" Or TypeName(ctrl) = "TextBox" Then
             ctrl.BorderColor = &HACCFFA
         End If
     Next
End Sub

Esta macro utiliza el evento Exit y se ejecuta al posicionarse fuera del Frame1.

Función: Cambia el color del borde de todos los controles ComboBox y TextBox del Frame1.

Utilidad: Restaurar apariencia (en este caso color de borde) que el evento Exit del ultimo control (ComboBox o TextBox) utilizado en un Frame1 no restaura al pasar a un control ubicado en un Frame2.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas