Asignar nombre a varios labels según valor de celdas

Tengo un userfomr con 45 labels, la idea es que cada label tenga el valor de una celda, recorriendo la columna de los valore de la celda, ya conozco la instrucción para asignar el valor de un label según el valor de una celda, pero al ser muchos no quiero hacer una instrucción para cada uno de ellos, actualmente tengo el siguiente código y funciona, pero quiero optimizarlo con algo que recorra los datos y llene los nombres de los labels según el nombre del label, es decir:

tarjeton2.Label1 = Hoja17.Cells(2, 1)
tarjeton2.Label2 = Hoja17.Cells(2, 2)
tarjeton2.Label4 = Hoja17.Cells(3, 1)
tarjeton2.Label3 = Hoja17.Cells(3, 2)
tarjeton2.Label6 = Hoja17.Cells(4, 1)
tarjeton2.Label7 = Hoja17.Cells(4, 2)
tarjeton2.Label8 = Hoja17.Cells(5, 1)
tarjeton2.Label5 = Hoja17.Cells(5, 2)
tarjeton2.Label10 = Hoja17.Cells(6, 1)
tarjeton2.Label9 = Hoja17.Cells(6, 2)

Y asi hasta que se completen los 45 labels validando que si esta vacio el valor de la celda, no muestre el label en el usserform

1 Respuesta

Respuesta
1

H o l a: Según tu código, hay que relacionar cada celda con un label.

Por ejemplo en el label1 va la celda "A2", en el label2 va la celda "B2", en el label4 va la celda "A3", en el label3 va la celda "B3". Como no tienes una secuencia, digamos organizada, entonces no se puede realizar de forma automática, se tendría que poner la relación celda - label.

Con el siguiente código, en el arreglo de celdas tienes que poner la secuencia de celdas.

Celdas = Array("A2", "B2", "A3", "B3", "A4", "B4", "A5", "B5")

Y en el arreglo etis, tienes que poner su correspondiente número de label:

Etis = Array(1, 2, 4, 3, 6, 7, 8, 5)

Entonces, quedamos para la celda A2 le toca el label1, para B2 el label2, para A3 el label4, y así sucesivamente.

Te anexo un ejemplo para 8 label, deberás completarlo para los 45

Private Sub UserForm_Activate()
'Por.Dante Amor
    'Oculta todos los label
    For i = 1 To 8
        tarjeton2.Controls("Label" & i).Visible = False
    Next
    'relaciona celda con label
    celdas = Array("A2", "B2", "A3", "B3", "A4", "B4", "A5", "B5")
    etis = Array(1, 2, 4, 3, 6, 7, 8, 5)
    'carga dato en el label
    For i = LBound(celdas) To UBound(celdas)
        If Hoja17.Range(celdas(i)).Value <> "" Then
            tarjeton2.Controls("Label" & etis(i)).Visible = True
            tarjeton2.Controls("Label" & etis(i)).Caption = Hoja17.Range(celdas(i)).Value
        End If
    Next
End Sub

De esa forma se ocultan todos los label y solamente se harán visibles los que tengan dato su correspondiente celda.

Si tuvieras una secuencia definida por ejemplo todas las celdas de la columna A van en los label nones: label1, label3, label5, etc y todas las celdas de la columna B van en los label pares: label2, label4, label6, etc; se podría automatizar de otra manera, no serían necesarios los arreglos. Pero todo depende de cómo organices las celdas con su correspondiente label.


'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Hola, gracias por tu respuesta, por cuestiones de trabajo no había podido responder, revisando tu respuesta tome en cuenta lo de tener organizado las celdas con los labels y así lo organice y utilice la opción .controls de la siguiente manera y funciona, 

With tarjeton2
o = 2
For k = 1 To 45
.Controls("Label" & k) = Hoja5.Cells(o, 1)
o = o + 1
Next
End With

Así asigno un valor seguido al nombre del label según lo que tenga en la celda

Ahora tengo el mismo problema con imagenes, 

tarjeton2.Image1.picture = LoadPicture(Hoja5.Cells(2, 4))
tarjeton2.Image2.picture = LoadPicture(Hoja5.Cells(3, 4))
tarjeton2.Image3.picture = LoadPicture(Hoja5.Cells(4, 4))

estoy tratando de utilizar .controls pero me arroja errores, me puedes ayudar en este tema o realizo otra pregunta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas