Public Enum DondeSeaplica
APLICAR_SOLO_AL_CONTENEDOR_PASADO = 1
APLICAR_EXCLUIR_EL_CONTENDEOR_PASADO = 2
APLICAR_A_TODOS = APLICAR_SOLO_AL_CONTENEDOR_PASADO + APLICAR_EXCLUIR_EL_CONTENDEOR_PASADO ' 3
End Enum
Private Sub Command1_Click()
Call CambiarFondoControl(135790, "TextBox", APLICAR_EXCLUIR_EL_CONTENDEOR_PASADO, Picture1)
MsgBox "deben haberse pintado todos los textbox EXCEPTO los contenidos en el picture1 de color rojo pardo"
Call CambiarFondoControl(246802, "TextBox", APLICAR_SOLO_AL_CONTENEDOR_PASADO, Picture2)
MsgBox "deben haberse pintado SOLO los textbox contenidos en el picture2 de color verde fuerte"
Call CambiarFondoControl(7654321, "TextBox", APLICAR_A_TODOS)
MsgBox "deben haberse pintado TODOS los textbox contenidos en el picture2 de color verde macilento"
Call CambiarFondoTextBox(7654321, "Timer", APLICAR_A_TODOS) ' <------- OJO: aquí debe dar error
End Sub
' Nota: se da por supuesto que operamos con un formulario llamado form1...
Private Sub CambiarFondoControl(ByVal nuevoColor As Long, ByVal Tipo As String, ByVal Aplicar As DondeSeaplica, Optional ByRef Contenedor As Object)
Dim ct As Control
If Tipo <> "" Then
On Local Error GoTo NoContenedor
If Contenedor Is Nothing Then Set Contenedor = Form1 ' <-------- OJO: hemos puesto Form1
Select Case Aplicar
Case DondeSeaplica.APLICAR_SOLO_AL_CONTENEDOR_PASADO
For Each ct In Form1.Controls ' nótese que debe ser un formulario...
If TypeName(ct) = Tipo Then
If ct.Container.Name = Contenedor.Name Then
ct.BackColor = nuevoColor
End If
End If
Next
Case DondeSeaplica.APLICAR_EXCLUIR_EL_CONTENDEOR_PASADO
For Each ct In Form1.Controls ' nótese que debe ser un formulario...
If TypeName(ct) = Tipo Then
If ct.Container.Name <> Contenedor.Name Then
ct.BackColor = nuevoColor
End If
End If
Next
Case DondeSeaplica.APLICAR_A_TODOS
For Each ct In Form1.Controls ' nótese que debe ser un formulario...
If TypeName(ct) = Tipo Then
ct.BackColor = nuevoColor
End If
Next
Case Else
MsgBox "No existe una correspondencia con el valor: " & CStr(Aplicar) & " para la variable 'Aplicar'"
End Select
End If
Exit Sub
NoContenedor:
If Err.Number = 438 Then
MsgBox "Ocurrió un error. El control " & Tipo & " no tiene una propiedad 'backcolor'", vbCritical, "Error al CambiarFondoControl"
Else
MsgBox "Ocurrió un error." & vbCrLf & Err.Description, vbCritical, "Error al CambiarFondoControl"
End If
End Sub