Predeterminar formato numérico de Textbox

Linda...!

Tengo un formulario con unos 60 textbox aproximadamente, en los que ingreso números exclusivamente.

Además, están vinculados entre ellos. Es decir, algunos deben sumarse a medida que ingreso información y arrojar el resultado en otro textbox.

Para hacer más útil el formulario, deseo hacer que cada uno de esos textbox, acepte sólo números y que los muestre con un punto como separador de miles. Luego, al darle click a un botón, me guarde las cifras en ciertas celdas de una planilla.

Tuve que hacer un código como el siguiente para los cambios en cada textbox:

Private Sub NPT107_Change()
NPT107.Text = Format(NPT107.Text, "#,#")
tot = 0
For i = 107 To 116
tot = tot + Val(Format(Me.Controls("NPT" & i).Text, "##"))
Next
Me.NPT117.Text = tot
Me.PT5.Text = NPT117.Text
End Sub

Y para que guarde debidamente las cifras de cada uno de ellos (es decir, que no tome el punto como separador de decimales; sino de miles), algo como lo siguiente:

For i = 120 To 131
Cells(i, ColSel).Value = Format(Me.Controls("NPT" & i).Text, "##")
Next

Ahora debo codificar la parte correspondiente para que evalúe si la información ingresada son números y en caso que no lo sean, me arroje una advertencia. Creo que podría hacerlo.

No obstante, quiero saber si hay manera de simplificar y/o acelerar todo esto, porque la PC se toma un tiempo interesante en procesar la información.

2 Respuestas

Respuesta
1

No hay nadie aquí llamada 'Linda' así que me corresponde la consulta por género ;)

Para la macro que dejaste ( y todas donde debes realizar cálculos) tendrías que colocar el formato luego del cálculo:

Private Sub NPT107_Change()
       'NPT107.Text = Format(NPT107.Text, "#,#")
tot = 0
For i = 107 To 116
    tot = tot + Val(Controls("NPT" & i).Text)
Next
NPT107.Text = Format(NPT107.Text, "#,#")
NPT117.Text = Format(tot, "#,#")
PT5.Text = Format(NPT117.Text, "#,#")
End Sub

Y para controlar que sean valores numéricos coloca esta para cada control:

Private Sub NPT107_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii < 48 Or KeyAscii > 57 Then
    KeyAscii = 0
    MsgBox "Ingrese solo valores numéricos."
    End If
End Sub

Los números desde 0 a 9 corresponden a los códigos ASCII 48 a 57.

PD1) En otros casos este control se podría realizar al finalizar la carga desde algún botón de Aceptar ... pero aquí lo necesitas para ir realizando cálculos.

PD2) Salvo que trabajes con controles de 2 o más formularios abiertos, no e necesaria la expresión ME. ... Excel entiende que se trata del userform en uso.

Hola, Elsa....!!!!

Perdón por la demora en responder.

Sí. Claro que te corresponde el adjetivo de Linda debido a tres cosas: eres mujer, cordobesa y te tomaste la molestia de responderme.

Para evitar celos del resto de la comunidad de todoexpertos, aclaro que en realidad, había tipeado: "Hola gente linda...!!!". Pero por esas cosas raras de la vida, en el envío se perdió la primer parte del texto y cuando me di cuenta del problema, ya no pude editarlo.

Yendo al punto de la consulta, muchas gracias Elsa. Veo que no hay forma de simplificar el trabajo que ya tengo para las sumas automáticas e inmediatas.

También conocía el código que me sugerís para aceptar sólo números en los textbox correspondientes, pero quería saber si algún experto como vos, podía simplificarme la cosa.

El aporte que me hiciste sobre el "Me....." fue muy bueno. Lo desconocía.

Para cerrar, gracias, Linda.....!!!!!.-

¿Podrías valorar mi respuesta para que no me siga apareciendo como 'pregunta pendiente'?

Respuesta
1

Es posible esto te ayude

https://youtu.be/q4apNBwTMrg

https://youtu.be/5IagqWxjLmk

https://youtu.be/gE64ac1xA0E

Visita https://programarexcel.com  descarga cientos de ejemplos de macros gratisSuscribe https://www.youtube.com/c/programarexcel?sub_confirmation=1  activa la campana y youtube te avisará cuando se suban nuevos vídeos

Hola Marcrodos....!!!!

Por lo pronto, ¡muchas gracias por tus aportes!.

Apenas tenga el tiempo y, sobre todo, la tranquilidad y privacidad necesarias, veré los videos que me sugieres y te haré comentarios más específicos sobre tu respuesta.

Hasta pronto.-

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas