[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



A mí sí me funciona el método SetFocus. Por ejemplo, este código (que
está asociado al botón CommandButton1), hace lo que debe, sin
problemas:

Private Sub CommandButton1_Click()
Dim n As Integer
For n = 0 To Me.Controls.Count - 1
If Left(Me.Controls(n).Name, 7) = "Validar" Then
If Me.Controls(n) = "" Then
MsgBox "El control " & Me.Controls(n).Name & " está
vacío." Me.Controls(n).SetFocus
End If
End If
Next n
End Sub


El código recorre todos los controles del formulario y si alguno de
los cuadros de texto cuyo nombre empieza por "Validar" está vacío,
muestra un mensaje y vuelve a él.

Si sigues sin conseguir que te funcione SetFocus, puedo mandarte un
libro con el formulario del ejemplo, y si no te funciona sabremos que
es algún problema del equipo o de la versión que tienes. Un saludo.


Fernando Arroyo
MS MVP - Excel


.
Respuesta Responder a este mensaje
#7 Fernando Arroyo
21/11/2003 - 17:58 | Informe spam
"Nilo" escribió en el mensaje news:
"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).




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.

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)...




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.

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

GraciasMIL
Un saludo,
Nilo




Un saludo.


Fernando Arroyo
MS MVP - Excel
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida