asignar propiedades desde matrices

30/07/2007 - 19:21 por Ivan | Informe spam
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

#1 Ivan
30/07/2007 - 20:38 | Informe spam
hola de nuevo,

parece que ya he encontrado el problema, al menos en las pruebas que he hecho

como me imaginaba, de mis dos opciones la que funciona es la segunda, con callbyname, pero hay que convertir a variant
el parametro pasado a dicha funcion para asignarselo a la propiedad. Al menos asi si me ha funcionado.

aqui pongo el resultado, y ya de paso quito algo de chatarra que se habia quedado de las pruebas

'******************************************
Public Sub Cargar_Propiedades_2(ByRef obj As Object, _
ByRef Array_Props As Variant, _
ByVal Array_Valores As Variant)
Dim n As Integer
For n = LBound(Array_Props) To UBound(Array_Props)
On Error Resume Next
CallByName obj, Array_Props(n), VbLet, CVar(Array_Valores(n))
On Error GoTo 0
Next
End Sub
'-
' y se la puede llamar pej. asi
'
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
End Sub
'*******************************************

aunque una de sus verdaderas utilidades, por ejemplo, podria ser para asignar diferentes valores a diferentes controles
extrayendo los valores de un rango de celdas, que es el caso que me ocupa

bueno, gracias en cualquier caso y un saludo
Ivan

PD: si alguien ve una forma mas sencilla o diferente de asignar las props, desde matrices, sera bien recibido

Preguntas similares