Saltar al contenido

Bucle con nombre de valor variable


Recommended Posts

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
 

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

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

 

publicado

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

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.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.