Actualizar textbox con celda durante la ejecución de una macro

Se podrá actualizar un texbox con el valor de una celda durante la ejecución de una macro.

Ejemplo tengo en la celda E5 tiene una formula de aleatorio. Entre y que durante la ejecución de una macro la celda sufre 10 cambios de valor.

Se podrá visualizar estos 10 cambios en un TextBox.

Porque actualmente si puedo ver éstos 10 cambios de valor en la celda pero en el TextBox solo veo el valor final, o sea el ultimo valor que tiene la celda, y esto lo puedo ver cuando a finalizado la macro.

1 Respuesta

Respuesta
1

Se puede hacer, por ejemplo, con la siguiente línea, pon la línea, después de que se haya actualizado la celda E5

TextBox1 = TextBox1 + Str(Range("E5"))

En el textbox1 vas a tener los 10 resultados concatenados, es decir, tendrás en una sola línea los 10 valores.

Saludos. Dam
Si es lo que necesitas.

No los necesito concatenado, lo que quiero es que mientras se ejecuta la macro con un

For i=1 to 10

.....

Next i.

en el primer ciclo E5 vale 3, y que un textbox o un label yo vea un 3, cuando empiece el segundo ciclo E5 vale 8 yo quiero ver a su vez en el textbox o el label un 8, y asi sucesivamente hasta que termine los 10 ciclos.

La la finalidad de saber si se puede esto, es porque tengo que hacer un sorteo de un numero de 5 dígitos al azar, y quiero que se vea el primer dígito estos 10 valores al azar y deje el ultimo valor, después continué con los números al azar del 2do dígito y que se vean otros 10 valores y se quede el ultimo y asi con los otros 3 dígitos.

No se si me doy a entender.

saludos.

Perdona, pero no entiendo bien lo que necesitas. Podrías ponerlo todo con ejemplos, dices en esta parte: "y quiero que se vea el primer dígito estos 10 valores al azar y deje el ultimo valor". ¿Quieres en el textbox el primer dígito o el último?

Ahora en un textbox, la única manera, es que se vayan concatenando los resultados. Si quieres los 10 resultados, un resultado en una sola línea, lo mejor es ponerlos en un listbox.

Si puedes poner la macro que tienes y decirme, paso a paso en ese ciclo del for, qué es lo que quieres que se vaya quedando en el listbox.

Te explico un poco quiero hacer una tómbola de números y los números tiene 5 dígitos; 14259, 45003, 12345... etc.

lo hice en las celdas E1 hasta la E5 es poner una formula de aleatorio.entre.

en la celda F1 puse concatenar estas 5 celdas, para que me de mi numero de 5 dígitos.

lo hice mediante un for n=1 to 100... next, para que en cada ciclo me diera un numero diferente en las 5 celdas, y que cuan i valiera 10 me copie y pegue valores en la celda E1, y cuando i valga 20 me copie y pegue valores en la celda E2; esto ultimo para que se quede el numero fijo, y asi hasta terminar las 5 dígitos.

Algo asi es mi código

HOJA DE EXCEL

E1 = ALEATORIO.ENTRE(0,9)
E2 = ALEATORIO.ENTRE(0,9)
E3 =ALEATORIO.ENTRE(0,9)

E4=ALEATORIO.ENTRE(0,9)

E5=ALEATORIO.ENTRE(0,9)

F1=CONCATENAR(E1,E2,E3,E4,E5)

CÓDIGO EN MODULO

For n = 1 To 350
If n = 1 Then

'NADA
ElseIf n = 70 Then -- en cada ciclo el valor de E1 es diferente hasta que 'n' valga 70
Range("E1").Select
Selection.Copy -- copia el valor de ese momento
Selection.PasteSpecial Paste:=xlPasteValues -- y lo deja fijo
FrmTombola.TxtAleatorio.Value = Range("F1").Value -- aquí es donde yo quiero que cuando se quede fijo lo pueda ver en el textbox que se llama TxtAleatorio
ElseIf n = 140 Then
Range("E2").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
FrmTombola.TxtAleatorio.Value = Range("F1").Value
ElseIf n = 210 Then
Range("E3").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
FrmTombola.TxtAleatorio.Value = Range("F1").Value
ElseIf n = 280 Then
Range("E4").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
FrmTombola.TxtAleatorio.Value = Range("F1").Value
ElseIf n = 350 Then
Range("E5").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
FrmTombola.TxtAleatorio.Value = Range("F1").Value
Else
FrmTombola.TxtAleatorio.Value = Range("E5").Value
End If

For i = 1 To 10
Range("E11").Select
Selection.ClearContents -- al hacer esto en cada ciclo hago que los valores de E1 a E5 cambien cada vez aleatoriamente
FrmTombola.TxtAleatorio.Value = Range("F1").Value -- cada ciclo que pasa quiero ver en el textbox el valor de F1
Range("E12").Select
Next i

Next n

Esto mismo que hace en las celdas E1,F1,G1,H1,I1, lo haga en un textbox o en un label, igualito.

saludos

Sub aleatorio()

Range("A1") = "0"
Range("A2") = "=+R[-1]C+1"
Range("A3") = "=+R[-1]C+1"
Range("A4") = "=+R[-1]C+1"
Range("A5") = "=+R[-1]C+1"
Range("A6") = "=+R[-1]C+1"
Range("A7") = "=+R[-1]C+1"
Range("A8") = "=+R[-1]C+1"
Range("A9") = "=+R[-1]C+1"
Range("A10") = "=+R[-1]C+1"
Range("B1") = "0"
Range("B2") = "=+R[-1]C+1"
Range("B3") = "=+R[-1]C+1"
Range("B4") = "=+R[-1]C+1"
Range("B5") = "=+R[-1]C+1"
Range("B6") = "=+R[-1]C+1"
Range("B7") = "=+R[-1]C+1"
Range("B8") = "=+R[-1]C+1"
Range("B9") = "=+R[-1]C+1"
Range("B10") = "=+R[-1]C+1"
Range("E5") = "=CONCATENATE(R[-2]C,R[-2]C[1],R[-2]C[2],R[-2]C[3],R[-2]C[4])"
Range("E3") = "=LOOKUP(RANDBETWEEN(0,9),R1C1:R10C1,R1C2:R10C2)"
Range("F3") = "=LOOKUP(RANDBETWEEN(0,9),R1C1:R10C1,R1C2:R10C2)"
Range("G3") = "=LOOKUP(RANDBETWEEN(0,9),R1C1:R10C1,R1C2:R10C2)"
Range("H3") = "=LOOKUP(RANDBETWEEN(0,9),R1C1:R10C1,R1C2:R10C2)"
Range("I3") = "=LOOKUP(RANDBETWEEN(0,9),R1C1:R10C1,R1C2:R10C2)"
For n = 1 To 350
If n = 1 Then
ElseIf n = 70 Then
Range("E3").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
ElseIf n = 140 Then
Range("F3").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
ElseIf n = 210 Then
Range("G3").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
ElseIf n = 280 Then
Range("H3").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
ElseIf n = 350 Then
Range("I3").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Else
End If
For i = 1 To 5
Range("E11").Select
Selection.ClearContents
Range("E12").Select
Next i
Next n
End Sub

Puedes crear un listbox que se llame listbox1, en tu formulario, cambia en tu macro lo siguiente:

For i = 1 To 10
Range("E11").Select
Selection. ClearContents -- al hacer esto en cada ciclo hago que los valores de E1 a E5 cambien cada vez aleatoriamente
FrmTombola.TxtAleatorio.Value = Range("F1").Value -- cada ciclo que pasa quiero ver en el textbox el valor de F1
Range("E12").Select
Next i

Por esto:

For i = 1 To 10
Range("E11").Select
Selection. ClearContents '-- al hacer esto en cada ciclo hago que los valores de E1 a E5 cambien cada vez aleatoriamente
FrmTombola.ListBox1.AddItem Range("F1").Value '-- cada ciclo que pasa quiero ver en el textbox el valor de F1
Range("E12").Select
Next i

Cuando ejecutes la macro, se va a añadir un registro en el listbox, cuando termine tu macro, verás en el listbox todos los valores que pasaron por la celda “F1”
Prueba y dime si es lo que necesitas.
Saludos. Dam
Si es lo que necesitas.

Es que al hacerlo asi, veo los números hasta que termina la macro y yo lo quiero ver durante la macro.

Al darle Clic al botón o ejecutar la macro que el valor del textbox cambie al igual que la celda.

saludos

Perdona, pero aún no entiendo lo que necesitas, ¿solamente quieres un valor en el textbox o quieres todos los valores que pasaron por la celda?

¿Quieres el valor en un textbox o en un listbox?

Actualmente cuando ejecutas la macro, ¿se detiene cada vez que se pone un valor en la celda?

¿Y a cuál celda te refieres a la celda "F1"?

Si gustas envíame tu archivo con la macro y explícame cómo la ejecuto y en qué momento quieres que se pase el dato de la celda al textbox.

Listo ya te mande el archivo a tu correo.

Le puse en el asunto: 'Angelotehu - Actualizar textbox con celda durante la ejecución de una macro '.

Saludos

En esta parte de tu macro

For i = 1 To 5
Range("E11").Select
Selection.ClearContents
FrmTombola.TxtAleatorio.Value = Range("E5").Value
Range("E12").Select
Next i

Agrega esta línea DoEvents

For i = 1 To 5
Range("E11").Select
Selection.ClearContents
FrmTombola.TxtAleatorio.Value = Range("E5").Value
Range("E12").Select
DoEvents
Next i

Prueba con lo anterior, Y si no también prueba con esta opción, FrmTombola. Repaint, aunque se ve mejor con DoEvents
For i = 1 To 5
Range("E11").Select
Selection.ClearContents
FrmTombola.TxtAleatorio.Value = Range("E5").Value
Range("E12").Select
FrmTombola.Repaint
Next i

Saludos. Dam
Si es lo que necesitas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas