Crear bucle pasando por varios textbox y asignando un valor a cada

Estoy intentando cargar varios textbox de un formulario vba en excel. Los texbox se llaman txt1, txt2... Hasta txt. 20. Quiero ir haciendo una serie de cálculos de datos que tengo en una hoja excel e ir cargando los resultados en sus respectivos textbox. He encontrado algo que usa los métodos de Controls pero no consigo aplicarlos. Lo que quiero es convertir el nombre del textbox en variable y acceder a él para asignarle un valor

Private Sub CalcularHorasTrabajo(col As Range, mes As Integer)
    Dim calculoMes As TextBox
    Dim ctrls() As Control
    Dim x, mañ, trd, full, total As Integer
    Dim ctrls() As Control
    ctrls() = Me.Controls.Find("txt" & mes, True)
    calculoMes.Text = directcast(ctrls(0), TextBox)
    mñn = 0
    trd = 0
    full = 0
    For x = 2 To 32
        If col.Offset(0, x).Value = "M" Then
            mñn = mñn + 1
        ElseIf col.Offset(0, x).Value = "T" Then
            trd = trd + 1
        ElseIf col.Offset(0, x).Value = "m/t" Then
            full = full + 1
        End If
    Next
    total = (full * Parametros.Range("b12").Value) + (mñn * Parametros.Range("b11").Value) + (trd * Parametros.Range("b10").Value)
End Sub

3 Respuestas

Respuesta
Respuesta
2

Respondiendo a : '...Lo que quiero es convertir el nombre del textbox en variable y acceder a él para asignarle un valor...., te dejo un ejemplo en la imagen.

Mis controles se llaman txt1, txt2, txt3... en ese orden. Solo tendría que declarar la variable 'nroMes' para este ejemplo.

Respuesta
1

Javier, de Excel no tengo ni idea, pero por si te puede dar una idea. Tengo un formulario con 15 cuadros de texto, llamados Texto1, Texto2,...

Cuando pulso el botón, pero la instrucción la puedes poner en cualquier parte

En este caso en particular, le tengo puesto

Private Sub Comando16_Click()
Dim ctl As Control, i As Integer
For i = 1 To 15
Set ctl = Controls("texto" & i)
ctl = i ^ 2
Next
End Sub

En Ctl= le podrías poner tus cálculos

Me da la impresión de que no le has puesto el Set a

ctrls() = Me.Controls.Find("txt" & mes, True)

Pero ya te digo que el Excel no es lo mío.

¡Gracias Julián por la respuesta! He intentado poniéndolo como en tu ejemplo pero no me funciona. He intentando a modificar el mio añadiéndole el set y nada. Se que hay una manera de hacerlo y era algo así como lo estamos haciendo pero no doy con él. Y no se por donde tengo el trabajo donde apliqué el método de ir variando el nombre del txtbox dentro de un bucle.

Ya te dije que el Excel no es lo mío.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas