Jump to content

Bucle con nombre de valor variable


Recommended Posts

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
 

Link to post
Share on other sites

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

 

Link to post
Share on other sites

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

Link to post
Share on other sites

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.

 

 

Link to post
Share on other sites

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.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Crear macros Excel

  • Posts

    • JSDJSD muchas gracias mas que excelente saludos
    • ¡¡¡¡ El archivo Libro1-1.xlsm
    • Prueba la macro, la solución en BD Solucion2de2, sin pasar por BD Solucion1de2. Sub FillRate() Application.ScreenUpdating = False With Sheets("BD Solución2de2") Sheets("BD").Cells.Copy .Cells .Select For x = 2 To .Range("A" & Rows.Count).End(xlUp).Row If x Mod 500 = 0 Then Application.StatusBar = "Tratando fila " & x If Not .Range("A" & x) = "" Then If .Range("C" & x) > 0 Then Base = "C" & x .Range("I" & x).Formula = "=D" & x & "/" & Base If .Range("I" & x) > 1 Or .Range("I" & x) < 0 Then .Rows(x).Delete x = x - 1 End If End If Next End With Application.StatusBar = False End Sub En la línea de estado de Excel se muestra un pequeño avance del proceso.
    • Un saludo a ambos, aquí te dejo otra opción
    • Private Sub TextBox1_Change() ActiveSheet.Range("C6").Value = TextBox1.Text TextBox3 = Range("C8").Text End Sub Private Sub TextBox2_Change() ActiveSheet.Range("C7").Value = TextBox2.Text TextBox3 = Range("C8").Text End Sub Private Sub CommandButton1_Click() TextBox1 = Empty TextBox2 = Empty TextBox3 = Empty TextBox1.SetFocus End Sub  
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy