[AYUDA EXCEL] Optimizar codigo vb

19/11/2003 - 11:47 por Nilo | Informe spam
Hola,

Tengo un par de problemas en Excel, que seguro tienen una solución muy
sencilla... Pero "el que no sabe es como el que no ve" :( y este es mi
caso...

1.- Tengo un formulario de Excel que tiene un monton de TextBox (120)
pero en realidad solo 6 son diferentes, los demás repiten las mismas
instrucciones para cada TextBox en particular.

Pongo un ejemplo (en mi caso los TextBox estan renombrados como TOTx):

Private Sub TOT1_Change()

End Sub


Lo que quiero es escribir este argumento una sola vez y no 20 veces
(para TOT1,TOT2...TOT20)

¿Como puedo hacer para que el numero que identifica a mi textbox TOT sea
una variable del 1 al 20 valida en todo el formulario?


2.- Como puedo hacer referencia a un rango de TextBox. Es decir si
quiero sumar sobre un textbox TOTTOTAL los textbox TOT1 a TOT20???

Supongo que no tendre que mencionarlos uno a uno ¿no?...(
TOTTOTAL.BoundValue = Format((CDec(TOT1) + CDec(TOT2) + CDec(TOT3) +
CDec(TOT4) + CDec(TOT5) + CDec(TOT6) + CDec(TOT7) + CDec(TOT8) + CDec
(TOT9) + CDec(TOT10) + CDec(TOT11) + CDec(TOT12) + CDec(TOT13) + CDec
(TOT14) + CDec(TOT15) + CDec(TOT16) + CDec(TOT17) + CDec(TOT18) + CDec
(TOT19) + CDec(TOT20)), "#,##0.00;[Red]-#,##0.00")

3.- Y la ultima cosa, al confirmar mi formulario se tienen que llenar
unos rangos con el contenido de mis textbox... Algo así como...

For lineas = 1 To 20
Range("Importe_Ud" & lineas).Select
ActiveCell.Value = CDec(TOT & lineas)
Next lineas

Los rangos los encuentra sin problema pero no logro que interprete "TOT
& lineas" como mi textbox... Tal como esta me pone 1, 2, ...



En fin, ya veis que son lagunas de principiante y agradezco de antemano
cualquier sugerencia que me podais hacer.

Un saludo,
Nilo

Preguntas similare

Leer las respuestas

#6 Nilo
21/11/2003 - 15:10 | Informe spam
"Fernando Arroyo" wrote in
news::


Fernando, a este paso tendré que invitarte a comer :) La verdad es que
eres un lujo:))

Te cuento rapidamente mi experiencia. He confeccionado un formulario con
3 textbox llamados ValidarUNO, ValidarDOS y ValidarTRES. He insertado tu
codigo (que bonito :) y me funciona pero quizás no como debería.
¿Interpreto mal si pienso que se debería parar despues de cada MsgBox y
tomar el foco del primero que encuentra vacío?

Te pregunto esto porque dejando los 3 en blanco recibo 3 MsgBox seguidos
y por ultimo toma el foco del ultimo (ValidarTRES).

Por simplificar, se me ha ocurrido probar sobre un evento EXIT (de
ValidarUNO) y otro CommandButton_Click el siguiente codigo:

If Me.ValidarUNO = "" Then Me.ValidarUNO.SetFocus

El resultado es que sobre Exit no funciona pero sí lo hace sobre
Click... ¿Problema del evento?... ¿O de mi versión?(9108 VBA Retail
6.3.8863 Forms:2.01)...

En cualquier caso, ya sé dónde funciona y dónde no, que ya es mucho :))

GraciasMIL
Un saludo,
Nilo



Mostrar la cita
.
#7 Fernando Arroyo
21/11/2003 - 17:58 | Informe spam
"Nilo" escribió en el mensaje news:
Mostrar la cita
:-)

Mostrar la cita
El código lo he escrito sin tener en cuenta que podían quedar varios controles vacíos. Para prevenir esta posibilidad habría que modificar el mensaje para que se mostrara la lista de los controles "no validables" en lugar de solo el último, y además para que el "foco" se dirigiera al primero que no cumple las condiciones en vez de al último.

Mostrar la cita
Es cierto, el método SetFocus no funciona si se trata de "redirigir" el foco de la edición al control que se acaba de abandonar desde el evento Exit, pero para conseguir esto hay un truco: si el control no cumple los requisitos de validación, simplemente pon una línea

Cancel = True

en tu ejemplo podría ser:

If Me.ValidarUNO = "" Then Cancel = True

Con esta línea se impide que el foco abandone el control.

Mostrar la cita
Un saludo.


Fernando Arroyo
MS MVP - Excel
Ads by Google
Search Busqueda sugerida