hola a todos,
estoy intentando asignar valores a determinadas propiedades de objetos (controles de userform en este caso) mediante 2
matrices: una que contendria las propiedades que quiero modificar y otra con los valores a asignar.
de momento he probado al menos estas 2 formas:
1.- por asignacion (llamemosle) directa, que aunque me extrañaba que funcionara, como sin embargo si es valida para
asignar el valor de las propiedadess pej. a un rango de celdas, pense que quizas valdria:
'*****************************************
Sub Cargar_Propiedades(ByRef obj As Object, _
ByRef Array_Props As Variant, _
ByVal Array_Valores As Variant)
Dim n As Integer
With obj
For n = LBound(Array_Props) To UBound(Array_Props)
On Error Resume Next
Array_Props(n) = Array_Valores(n)
On Error GoTo 0
Next
End With
End Sub
'-
' y para probarla (pej. con un boton del mismo form)
Public Sub testCargar_Propiedades()
Dim ct As Object
Dim valores, props
set ct=userform1.textbox1
valores = Array(50, 50, 50, 50)
With ct
props = Array(.Top, .Left, .Height, .Width)
Cargar_Propiedades ct, props, valores
End With
set ct = nothing
End Sub:
'**************************************************
2.- usando CallByName. Esta sin embargo, estaba convencido que funcionaria, pero no se si es que hago algo mal, o que
no es posible
'**************************************************
Public Sub Cargar_Propiedades_2(ByRef obj As Object, _
ByRef Array_Props As Variant, _
ByVal Array_Valores As Variant)
Dim n As Integer
With obj
For n = LBound(Array_Props) To UBound(Array_Props)
On Error Resume Next
CallByName obj, Array_Props(n), VbLet, Array_Valores(n)
On Error GoTo 0
Next
End With
End Sub
'--
' y llamandola pej. directamente desde un boton del form
Private Sub CommandButton1_Click()
Dim propiedades, valores
propiedades = Array("Top", "Left", "Height", "Width")
valores = Array(50, 50, 50, 50)
Cargar_Propiedades_2 TextBox1, propiedades, valores
'' esta seria la llamada a la otra forma de intentarlo
' testCargar_Propiedades
End Sub
'*******************************************
bueno, si veis donde estoy metiendo la pata os lo agradezco
un saludo y hasta pronto
Ivan
Leer las respuestas