Minimizar código para llenar formulario

Estoy realizando un trabajo para la empresa, pero necesito minimizar un código que me llena un formulario, dependiendo la cantidad de registros. Actualmente lo tengo así y me funciona, pero quisiera me dieran luces de como lo puedo minimizar. Gracias de antemano.

Para este caso 3, me llena 12 TextBox, pero hay casos hasta 7 y pues se imaginaran como queda el código

Case 3
TextBox1.Visible = True
TextBox1.Value = Sheets("Filtro").Range("B2").Value
TextBox2.Visible = True
TextBox2.Value = Sheets("Filtro").Range("I2").Value
TextBox3.Visible = True
TextBox3.Value = Sheets("Filtro").Range("P2").Value
TextBox4.Visible = True
TextBox4.Value = Sheets("Filtro").Range("O2").Value
TextBox5.Visible = True
TextBox5.Value = Sheets("Filtro").Range("B3").Value
TextBox6.Visible = True
TextBox6.Value = Sheets("Filtro").Range("I3").Value
TextBox7.Visible = True
TextBox7.Value = Sheets("Filtro").Range("P3").Value
TextBox8.Visible = True
TextBox8.Value = Sheets("Filtro").Range("O3").Value
TextBox9.Visible = True
TextBox9.Value = Sheets("Filtro").Range("B4").Value
TextBox10.Visible = True
TextBox10.Value = Sheets("Filtro").Range("I4").Value
TextBox11.Visible = True
TextBox11.Value = Sheets("Filtro").Range("P4").Value
TextBox12.Visible = True
TextBox12.Value = Sheets("Filtro").Range("O4").Value

btnAceptar1.Visible = True
btnCerrar1.Visible = True
btnAceptar2.Visible = True
btnCerrar2.Visible = True
btnAceptar3.Visible = True
btnCerrar3.Visible = True
txtCuantia1.Visible = True
txtCuantia1.Value = Format(Sheets("Filtro").Range("J2").Value, " #,##0")
txtCuantia2.Visible = True
txtCuantia2.Value = Format(Sheets("Filtro").Range("J3").Value, " #,##0")
txtCuantia3.Visible = True
txtCuantia3.Value = Format(Sheets("Filtro").Range("J4").Value, "#,##0")
lbl1.Visible = True
lbl2.Visible = True
lbl3.Visible = True
Label1.Visible = True
Label2.Visible = True
Label3.Visible = True
Label4.Visible = True
Label6.Visible = True
Label7.Visible = True
Label8.Visible = True
Label9.Visible = True
Label10.Visible = True
Label11.Visible = True
Case 4

1 Respuesta

Respuesta
2

Te dejo un bucle de ejemplo para algunos casos ... el resto podrás armarlo siguiendo esta idea:

Case 3
'x Elsamatilde
'para los primeros textbox
For i = 1 To 12
   Me.Controls.Item("TextBox" & i).Visible = True
Next i
'para los 11 Label
For i = 1 To 1
   Me.Controls.Item("Label" & i).Visible = True
Next i
'seguir con el resto

Los valores tendrás que pasarlos uno por uno tratándose de celdas discontinuas.

¡Gracias! Si tenia la duda que se pudiera hacer con los valores, pero si una experto como tu me lo confirma, no me desgasto más buscando.

Eres una maravilla... GRACIAS TOTALES

Mmm si una 'maravilla' recibe solo un valoración 'Buena' no sé qué debiera ser para obtener un Excelente ;(

Veamos, tampoco es tan así de que no se pueda con valores... solo que las celdas discontinuas deben seguir una regla. Es decir que deben estar 'todas' en cierto orden.

Los textbox del 1 al 4 corresponden a rangos B, I, O, P de la fila 2, los 4 siguientes a la fila 3 y así

TextBox1.Value = Sheets("Filtro").Range("B2").Value
TextBox2.Visible = True
TextBox2.Value = Sheets("Filtro").Range("I2").Value
TextBox3.Visible = True
TextBox3.Value = Sheets("Filtro").Range("P2").Value
TextBox4.Visible = True
TextBox4.Value = Sheets("Filtro").Range("O2").Value
TextBox5.Visible = True

Entonces, para este grupo se puede seguir agregando condicionales. Para txtCuantia son 3 instrucciones y un bucle te llevará más líneas.

Por eso hay que evaluar qué será más corto, un bucle o línea por línea.

Ya te paso en un momento el código pero promete ser algo más generoso en la valoración ;)

Sdos!

Dejo ejemplo para el primer grupo. Ya comenté que para txtCuantia no vale la pena un bucle sino pasar datos directamente por ser solo 3 instrucciones... pero eso lo resolverás en tu modelo completo. Este ejemplo es válido para todo grupo de cierta cantidad de líneas y cierto orden.

For i = 1 To 12
    Me.Controls.Item("TextBox" & i).Visible = True
    'colx es 2, 9, 16, 15 según i = 1, 2, 3, 4 para el primer grupo
    If i = 1 Or i = 5 Or i = 9 Then colx = 2
    If i = 2 Or i = 6 Or i = 10 Then colx = 9
    If i = 3 Or i = 7 Or i = 11 Then colx = 16
    If i = 4 Or i = 8 Or i = 12 Then colx = 15
    Select Case i
        Case 1 To 4
            Me.Controls.Item("TextBox" & i) = Sheets("Filtro").Cells(2, colx).Value
        Case 5 To 8
            Me.Controls.Item("TextBox" & i) = Sheets("Filtro").Cells(3, colx).Value
        Case 9 To 12
            Me.Controls.Item("TextBox" & i) = Sheets("Filtro").Cells(4, colx).Value
    End Select
Next i

Sdos!

¡Gracias! 

Tienes toda la razón, mereces una calificación de excelente, llevo muchos años en este grupo y he aprendido mucho, pero creo que nunca había solicitado ayuda y apenas estoy como aprendiendo a calificar y todo lo que tiene que ver con un poco de cosas nuevas que veo en la web ahora que entre nuevamente, logros y otros cuentos... en fin, he cambiado tu calificación por la que te mereces.

Voy a revisar muy bien lo que me acabas de enviar a ver si lo entiendo y lo puedo aplicar. Repito, eres una MARAVILLA y creo que ya tiene tu calificación EXCELENTE.

GRACIAS TOTALES

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas