Saltar al contenido

Bucle con nombre de valor variable

publicado

Hola a todos. Tengo un bucle donde el nombre del la variable de la cual necesito obtener el valor va cambiando de Cant1....a....Cant10 (he simplificado el ejemplo que sigue). Los valores de estas variables Cant1.. fueron definidos antes para todo el módulo.

Dim i As Byte
Dim a As String
For i = 1 To 10
   a = "Cant" & i   
  Cells(Fila, 1).Value = a

Next i

 

El bucle como tal funciona pero tengo el problema que en lugar de ponerme el valor de Cant1, Cant2 (definidos antes) me escribe el texto "cant1", "cant2".

Como obtengo el valor de Cant1 a Cant10?

Gracias
 

Featured Replies

publicado

No se puede, a diferencia de un userform donde existe la colección controls, no existe una colección para las variables.

Debes utilizar un array.

dim cant(10)

cant(1)=1

cant(2)=5

.....

....

cant(10)=75

y luego si, ya puedes hacer:

Dim i As Byte
For i = 1 To 10   
  Cells(i, 1).Value = cant(i)
Next i

 

publicado
  • Autor

muchas gracias. No tengo idea lo que es un array. Soy principiante. 

publicado
  • Autor

y si en lugar de la variable Cant1, Cant2, cito el textbox donde se han puesto dicho valores?

 

publicado
  • Autor

Mira estoy pensando en esto:

b = Controls("TxtComp" & i & "Cant").Value

TxtComp1Cant, TxtComp2Cant es donde se ingresan los valores pero por algún motivo se me devuelven como texto y no puedo hacer ningún cálculo.

Hay alguna forma de convertirlos a número?

 

Saludos

publicado
  • Autor

Hola de nuevo, 

Lo he hecho así:

Dim i, k As Byte
Dim a, c As String
Dim b As Variant
For i = 1 To 10
    k = 3 * (i - 1) 'para ir saltando de a 3 columnas
    
    a = Controls("CbxComp" & i).Value   'código de componente a ingresar en tabla ProdStd
    b = Replace(Controls("TxtComp" & i & "Cant").Value, ",", ".")  'cantidad de componente a ingresar en tabla. Como es un dato de texto, se cambia la coma por punto para que la función VAL pueda comprender que hay decimal
    c = Controls("CbxComp" & i & "Pp").Value  'proceso de producción de cada paso a ingresar en tabla
    
    If a = "" Then
        Exit For
    Else
        Cells(FilaIngreso, 20 + k).Value = a
        Cells(FilaIngreso, 21 + k).Value = Val(b) / 100
        Cells(FilaIngreso, 22 + k).Value = c
    End If
Next i

Me funciona bien si solo tengo un dato (i=1). Cuando ya tengo 2 datos o más queda parada la macro y da error.

 

 

publicado

Tu mismo reconoces que no tienes experiencia en VBA, por lo tanto es muy difícil que encuentres soluciones al problema que pretendes resolver. Sube tu archivo y explica que quieres hacer.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.