Me gustaría que cuando sumo dos sumandos por ejemplo =[Texto1]+[Texto2] el
problema es que el segundo sumando [Texto2] es una función que da como
resultado #error
¿Puedo hacer que cuando [Texto2] sea igual a #error le asigne un valor cero?
Es decir si [Texto2]= #error debería sumar [Texto1]+0
Gracias
Salu2
--
José Mª Fueyo
[MS MVP Access]
Prueba con la siguiente fórmula:
=[Texto1]+SiInm(IsError([Texto2]);0;[Texto2])
Espero que te sirva de algo.
Un saludo,
Ignacio.
Ese es mi consejo
--
Saludos desde Barcelona,
Juan M. Afán de Ribera
http://accessvbafaq.mvps.org
"Ignacio" wrote:
> .
>
Habitualmente eso se produce cuando uno de los controles intervinientes en
el cálculo "no existe". Es bastante habitual cuando uno de los cuadros de
texto es o hace referencia a un control de un subformulario (un sumatorio
por ejemplo). Si el subformulario no tiene datos, el cuadro de suma ni llega
a "existir" por lo que, al intentar que forme parte de una expresión,
produce #Error.
Y no lo podemos solucionar con un Nz, puesto que esa función evalúa el
Nulo.... y el control inexistente es tan poca cosa que ni siquiera es Nulo.
La forma de solucionarlo (al menos la que yo utilizo) es la de evaluar si se
está produciendo un error y, para eso, tenemos la función IsError.
En lugar de
=[Texto1]+[Texto2]
yo tendría esto:
=SiInm(IsError([Texto1]);0;[Texto1])+SiInm(IsError([Texto2]);0;[Texto2])
Un saludo
--
------
Xavi
http://www.llodax.com
http://www.mvp-access.com
http://www.aesoft-databases.com
"Juan M. Afan de Ribera" <JuanMAfa...@discussions.microsoft.com>
escribió en el mensaje de
noticias:74A567F8-B07D-4CA5...@microsoft.com...
Y como Corríjes el caso que puso Xavi, Definitivamente juntandose todos
ustedes ganamos todos, Saludos.
supongo que es una buena pregunta, pero el caso es que ahora no puedo
reproducir el caso que él comenta, así que tampoco puedo hacer ninguna prueba
para averiguarlo. No se si en un caso como ese serviría la función IsObject o
preguntar por algo parecido a eso, sinceramente. De todas maneras, para mí
una cosa es lo que a veces se plantea en las ñus, que muchas veces es fruto
de la inexperiencia o de un mal planteamiento (ojo!, sin querer ofender a
nadie, eh? que yo soy el primero que me lio de mala manera con todo) y otra
muy diferente es la "vida real" en la cual supongo que todos tendemos a ser
prácticos.
Siguiendo la línea de lo que yo recomendaba, si no encontrara una forma
eficaz de detectar ese #error a través de una consulta (que todo sea dicho,
una consulta es un espacio muy limitado y que deja muy poco espacio a un
programador) escribiría una función en VBA y que detectara primero un posible
error de ese tipo y que devolvería un valor booleano o ya directamente el
valor que interesara para ejecutar esa consulta. Hay que echar mano de la
flexibilidad que proporciona VBA a las consultas Access, no?
--
Saludos desde Barcelona,
Juan M. Afán de Ribera
http://accessvbafaq.mvps.org
La piramide del conocimiento de los japoneses:
1.- Inconsiente e incompetente
2.- Consiente e incompetente
3.- Consiente competente
4.- Inconsiente competente
Lo que nos pasa a los que participamos aquí (Al menos yo lo creo así y a mi
me pasa), es que la gran mayoría estamos en el primer renglón y creemos que
nuestra pregunta es única y a nadien le había ocurrido, por tanto ni siquiera
nos damos la tarea de buscar a ver si a alguien le ocurrio lo mismo y/o algo
similar que pudiera darnos una idea de como solucionarlo.
Respecto a tu respuesta también creo que podría usar la función Dcount o
directo
con un RecordCount, pero me sigue pareciendo más directo y sencillo con
IsError, será que precisamente eso estoy en el nivel 1 y ustedes en el 4
Y al función IsObject nunca la e usado voy a investigarla, saludos.
no se si he entendido bien este último mensaje. En todo caso, lo vuelvo a
decir, por si acaso: con mis comentarios no pretendo ofender a nadie, en
serio :-) aquí todos estamos para pasarlo bien, aprender, preguntar, resolver
dudas, problemas o satisfacer nuestra curiosidad, lo que sea.
Yo iría más allá de lo que dicen los japoneses y reduciría esa lista a sólo
dos puntos:
- los que quieren aprender (tanto si saben como si no)
- los que no quieren aprender (tanto si saben como si no)
:-)
y ahora... siguiendo con el tema... no entiendo muy bien lo del RecordCount
y lo del DCount y como aplicarlo aquí.
Por un lado estaba lo que preguntaba Dazdevil que sólo hablaba de una
"función" que a veces devolvía #error y por otro lado estaba lo que comentaba
Xavi sobre la posibilidad de que lo que estuviera ocurriendo tratara sobre un
control de subformulario. Los dos casos podrían ser diferentes de tratar. Una
función es una función y un control es un control.
Si es una función la que devuelve #error entonces podría ser que la función
esperara que se le pasara como argumento un parametro de tipo Long y después
se le pase una cadena, por ejemplo. En un caso así, debería ir a la función y
corregir esa circunstancia, poniendo el argumento como variant y también
algún mecanismo de detección de errores. En un caso como éste IsError llamado
desde la consulta no detectará el error y no servirá.
Si en cambio estamos hablando de la existencia o inexistencia de un control
en un subformulario, entonces podría servirnos cosas como IsObject, que como
su nombre indica, detecta si un valor es un objeto o no. También podría
servirnos el operador Is... en fin, sólo estoy haciendo conjeturas. Para el
caso que propuso Xavi, intenté reproducir el caso a modo de ejemplo, para
hacer pruebas, pero no conseguí que en ningún caso me devolviera no un error,
eh? sino el valor #error. Así que ya no pasé de ahí.
;-)
--
Saludos desde Barcelona,
Juan M. Afán de Ribera
http://accessvbafaq.mvps.org
Respecto al problema yo ya lo reproduje:
http://cid-15733bea2103e55f.skydrive.live.com/self.aspx/.Public/error.mdb
Al dar Click en Consulta Clientes te sale el error (Claro ya se que si
cambio la consulta del combo lo evito) pero suponiendo que no pueda mover el
combo. Saludos.
y por otro lado, mi nueva lista? errr, qué nueva lista? (es que hoy he
dormido poco y ya ando que no me veo, perdona el despiste)
:-)
--
Saludos desde Barcelona,
Juan M. Afán de Ribera
http://accessvbafaq.mvps.org
Lo otro:
para corregir ese #error el método sería acceder al recordset del
subformulario y preguntarle si su propiedad recordcount es mayor de 0 (es
decir, si tiene registros), si es cierto, entonces se pregunta por el valor
del campo del subformulario con los totales y se asigna ese valor al cuadro
de texto del formulario que muestra los totales, si no hay registros,
directamente se pone el valor 0.
Si esto lo hacemos en el mismo origen del control del cuadro de texto,
vendría a ser algo así:
= iif(subformulario.form.recordsetclone.recordcount > 0;
subformulario.form.campo_totales; 0)
En Access 2007 me he dado cuenta de que no se puede acceder al recordset del
subformulario desde la propiedad origen del control, como en versiones
anteriores (vaya! yo creía que ibamos hacia adelante con las versiones, y
parece que vamos hacia atrás :-S). En este caso, entonces es cuestión de
hacer una función VBA para ejecutar el mismo proceso que describía más arriba
y llamar a esta función desde el origen del control de ese cuadro de texto o
asociándolo al evento click, beforeupdate o lo que sea del control que
desencadena el proceso.
Mi opinión sigue siendo que si se detecta un error se ha de corregir. Es muy
arriesgado andar con valores indeterminados por ahí sueltos. Acaban
desencadenando otros errores en cascada y al final es muy difícil saber cual
es el origen del problema.
--
Saludos desde Barcelona,
Juan M. Afán de Ribera
http://accessvbafaq.mvps.org
Perfecto, pero también se puede con Dcount como te había dicho y a de
funcionar en access 2007 (no puedo probarlo trabajo con 2002)
=SiInm(DCont("Cliente","contotales","Cliente= " &
[Cuadrocombinado])>0,SubforconCte.Formulario!total,0)
Gracias, Saludos
veo que mi consulta a generado debate. Debo deciros que Xavi dió en la
diana. El problema era el que exactamente definía Xavi.
La función que el me propuso funcionó.
y Gracias a todos
"emiliov" <emi...@discussions.microsoft.com> escribió en el mensaje de
noticias news:2CEE72CB-8E89-4CC7...@microsoft.com...