VALOR=VAL ??

12/12/2007 - 00:26 por Orfao | Informe spam
Hola Foristas !!
Tengo un problemita, a ver si me ayudan !
En las celda A1 debo controlar la entrada solo a numeros mayores que cero (0),
luego de teclear en dicha celda "caracteres o valores o nada" se ejecuta un
procedimiento que me indica si son datos validos o no.

if [A1]=0 or not isnumeric([A1]) then vbaproject.error.show : exit sub

El problema se presenta cuando por error se introduce por ej.: 123.456.75
es decir 123punto456punto75
Si verifico en excel +VALOR(A1) me da como resultado #VALOR mientras que en
codigo Val(A1) me da como resultado 123 , (Me acepta los primeros caracteres
numericos como el valor de la celda) lo cual no es correcto.

como puedo evitar/manejar/controlar este tipo de errores ??

Gracias.
Me alimento del conocimiento de todos
 

Leer las respuestas

#1 Héctor Miguel
12/12/2007 - 07:16 | Informe spam
hola, moises !

En las celda A1 debo controlar la entrada solo a numeros mayores que cero (0)
luego de teclear en dicha celda "caracteres o valores o nada" se ejecuta un procedimiento que me indica si son datos validos o no.
if [A1]=0 or not isnumeric([A1]) then vbaproject.error.show: exit sub
El problema se presenta cuando por error se introduce por ej.: 123.456.75 es decir 123punto456punto75
Si verifico en excel +VALOR(A1) me da como resultado #VALOR mientras que en codigo Val(A1) me da como resultado 123
(Me acepta los primeros caracteres numericos como el valor de la celda) lo cual no es correcto.
como puedo evitar/manejar/controlar este tipo de errores ??



1) la evaluacion que te da la funcion Val(...) (funcion de vba) como "valida"... es "correcta" (aun cuando el numero "real" no lo sea) :-((
por que ???... si consultas la ayuda en linea de vba-excel acerca de la funcion Val() los comentarios "dicen":
=Comentarios
La funcion Val deja de leer la cadena en el primer caracter que no puede reconocer como parte de un numero.
Los simbolos y caracteres que se consideran a menudo parte de valores numericos, como signos de moneda y comas, no se reconocen.
Sin embargo, la funcion reconoce los prefijos de base &O (para octal) y &H (para hexadecimal).
Los espacios en blanco, los tabuladores y los avances de linea se eliminan del argumento.
Lo siguiente devuelve el valor 1615198: Val(" 1615 198 Calle N.E.")
=-> tambien la funcion vba IsNumeric(...) tiene sus "vicisitudes" <= OJO

2) si necesitas evaluar celdas con valores "reconocibles" para excel, prueba usando al excel (desde vba) con la funcion evaluate("texto")
prueba cambiando tu evaluacion (en el codigo) +/- a lo siguiente:

If Not Evaluate("and(a1>0,isnumber(a1))") Then ' aqui siguen tus instrucciones de "error" ;) '

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

Preguntas similares