Discussion:
Función IsError
(demasiado antiguo para responder)
Ruben
2009-04-10 00:06:01 UTC
Permalink
Hola.

Estoy tratando de dejar en blanco un error #Error en un formulario mediante
la función IsError: =SiInm(IsError(MiExpresión;"";MiExpresión))

Sin embargo no sé por qué no me funciona.

Si pongo: =IsError(MiExpresión) obtengo #Error

Y si pongo algo que no sea error por ejemplo: =IsError(2+2) obtengo 0.

¿Qué ocurre?

Gracias. Un saludo,
--
Ruben Turienzo
Conrrad
2009-04-10 11:22:39 UTC
Permalink
Hola Ruben,
Prueba así:

=SiInm(IsError(MiExpresión);"";MiExpresión)

Saludos.
Post by Ruben
Hola.
Estoy tratando de dejar en blanco un error #Error en un formulario mediante
la función IsError: =SiInm(IsError(MiExpresión;"";MiExpresión))
Sin embargo no sé por qué no me funciona.
Si pongo: =IsError(MiExpresión) obtengo #Error
Y si pongo algo que no sea error por ejemplo: =IsError(2+2) obtengo 0.
¿Qué ocurre?
Gracias. Un saludo,
--
Saludos,

Blog sobre Access: http://accessforlive.blogspot.com

Angel Gil
conrrad69arrobagmailpuntocom
Cartagena

Animo.
Hay cosas peores que levantarse por la mañana. Por ejemplo, no levantarse por la mañana.
Ruben
2009-04-11 00:21:01 UTC
Permalink
Perdón Conrrad, lo había puesto como tú dices, me he equivocado al ponerlo
aquí.
--
Ruben Turienzo
Post by Conrrad
Hola Ruben,
=SiInm(IsError(MiExpresión);"";MiExpresión)
Saludos.
Post by Ruben
Hola.
Estoy tratando de dejar en blanco un error #Error en un formulario mediante
la función IsError: =SiInm(IsError(MiExpresión;"";MiExpresión))
Sin embargo no sé por qué no me funciona.
Si pongo: =IsError(MiExpresión) obtengo #Error
Y si pongo algo que no sea error por ejemplo: =IsError(2+2) obtengo 0.
¿Qué ocurre?
Gracias. Un saludo,
--
Saludos,
Blog sobre Access: http://accessforlive.blogspot.com
Angel Gil
conrrad69arrobagmailpuntocom
Cartagena
Animo.
Hay cosas peores que levantarse por la mañana. Por ejemplo, no levantarse por la mañana.
Patxi Sanz
2009-04-10 11:27:23 UTC
Permalink
Hola Rubén:

Puede que no sea un error como tal lo que estás evaluando. ¿Qué expresión es
la que quieres controlar?
--
Un saludo,


Patxi Sanz
Tudela (NA)
Ruben
2009-04-11 00:51:01 UTC
Permalink
Me había emperrado en hacerlo con IsError, y me acabo de dar cuenta de que
era mucho más fácil haciendo:

=SiInm([cboNProv] Es Nulo;"";DBúsq("[PROVEEDOR]";"[PROVEEDORES]";"[Nº
PROVEEDOR]=" & Formularios!QUEJAS!cboNprov)

Con lo cuál tengo el problema resuelto, pero sigo sin saber por qué no me
funcionaba IsError. Si me dáis alguna pista os lo agradezco.

Un saludo,
--
Ruben Turienzo
Hola Patxi,
DBúsq("[PROVEEDOR]";"[PROVEEDORES]";"[Nº PROVEEDOR]=" &
Formularios!QUEJAS!cboNprov)))
En función del valor de Nº de proveedor que tengo elegido en una combo box
me busca el Nombre del Proveedor en la tabla correspondiente. Esto funciona
bien, pero cuando tengo la combo box en blanco porque no he elegido nada me
aparece #Error, y necesito que salga en blanco.
Un saludo,
--
Ruben Turienzo
Post by Patxi Sanz
Puede que no sea un error como tal lo que estás evaluando. ¿Qué expresión es
la que quieres controlar?
--
Un saludo,
Patxi Sanz
Tudela (NA)
Patxi Sanz
2009-04-11 10:50:57 UTC
Permalink
Porque IsError no comprueba si la función o lo que sea que pases como
argumento genera un error. Lo que hace es devolver Verdadero o Falso
dependiendo de si lo que pasas como argumento es un "objeto" error.

Un ejemplo:

En la ventana Inmediato del editor de VBA, escribe lo siguiente y pulsa
Enter al final de cada línea:

? IsError(13)
? IsError("pepe")
? IsError(CVerr(13))
? IsError(1/0)
? IsError(DLookup("UnCampo", "UnaTabla", "OtroCampo=" & Null))

El resultado es el siguiente:

- En las 2 primeras líneas, devuelve Falso, ya que los números o cadenas de
texto no son errores.
- En la tercera línea devuelve Verdadero, porque CVErr convierte el número
de error en un "objeto" error.
- Las 2 últimas líneas lanzan mensajes de error (división entre cero y error
de sintaxis), porque IsError no comprueba si la expresión lanzara un error;
lo que hace es comprobar los valores devueltos. O lo que es lo mismo: si
DLookup devolviera un "objeto" error, sí que podría devolver Verdadero, pero
no lo devuelve, lo lanza, con lo que el IsError ya no comprueba nada.
--
Un saludo,


Patxi Sanz
Tudela (NA)
Ruben
2009-04-12 09:43:01 UTC
Permalink
No me queda demasiado claro cuándo la expresión devuelve un objeto error
porque en otros posts del foro veo aplicaciones muy similares a la que yo lo
estaba utilizando con buenos resultados...

Sólo me queda una duda: si tengo una fórmula, por ejemplo, que me lanza un
error (pero no devuelve un objeto error), ¿hay alguna forma de utilizar
IsError para detectarlo y poder tomar acciones?

Gracias,
--
Ruben Turienzo
Post by Patxi Sanz
Porque IsError no comprueba si la función o lo que sea que pases como
argumento genera un error. Lo que hace es devolver Verdadero o Falso
dependiendo de si lo que pasas como argumento es un "objeto" error.
En la ventana Inmediato del editor de VBA, escribe lo siguiente y pulsa
? IsError(13)
? IsError("pepe")
? IsError(CVerr(13))
? IsError(1/0)
? IsError(DLookup("UnCampo", "UnaTabla", "OtroCampo=" & Null))
- En las 2 primeras líneas, devuelve Falso, ya que los números o cadenas de
texto no son errores.
- En la tercera línea devuelve Verdadero, porque CVErr convierte el número
de error en un "objeto" error.
- Las 2 últimas líneas lanzan mensajes de error (división entre cero y error
de sintaxis), porque IsError no comprueba si la expresión lanzara un error;
lo que hace es comprobar los valores devueltos. O lo que es lo mismo: si
DLookup devolviera un "objeto" error, sí que podría devolver Verdadero, pero
no lo devuelve, lo lanza, con lo que el IsError ya no comprueba nada.
--
Un saludo,
Patxi Sanz
Tudela (NA)
Patxi Sanz
2009-04-12 11:10:31 UTC
Permalink
Supongamos otras funciones más "sencillas":

- IsNull() devuelve Verdadero si lo que pasamos como argumento es un valor
nulo.
- IsDate() devuelve Verdadero si lo que pasamos como argumento es una fecha.
- IsNumeric() devuelve Verdadero si lo que pasamos como argumento es un
número.

IsError() funciona de la misma forma: sólo devuelve Verdadero si lo que
pasamos como argumento es un "objeto" error.

En cuanto a las otras aplicaciones muy similares, habría que ver cómo lo
usan.

Y para las fórmulas, es mejor usar otras funciones que intentar usar el
IsError:

- Nz, IsNull() o Is Null si un control está vacío, junto con un Iif (como lo
usaste en tu expresión).
- Iif con una comparación = 0, para evitar las divisiones entre cero.
- El método IsLoaded del objeto CurrentProject.AllForms o
CurrentProject.AllReports, por si tenemos que recoger datos de otros
formularios e informes, y no están abiertos.
--
Un saludo,


Patxi Sanz
Tudela (NA)
Ruben
2009-04-11 00:31:01 UTC
Permalink
Hola Patxi,

La expresión es esta:

DBúsq("[PROVEEDOR]";"[PROVEEDORES]";"[Nº PROVEEDOR]=" &
Formularios!QUEJAS!cboNprov)))

En función del valor de Nº de proveedor que tengo elegido en una combo box
me busca el Nombre del Proveedor en la tabla correspondiente. Esto funciona
bien, pero cuando tengo la combo box en blanco porque no he elegido nada me
aparece #Error, y necesito que salga en blanco.

Un saludo,
--
Ruben Turienzo
Post by Patxi Sanz
Puede que no sea un error como tal lo que estás evaluando. ¿Qué expresión es
la que quieres controlar?
--
Un saludo,
Patxi Sanz
Tudela (NA)
c***@gmail.com
2015-02-15 15:51:13 UTC
Permalink
Por si alguien le sirve esta fue la solución que encontré:
On Error GoTo Solución 'Captura el error y envia el flujo del programa
'a la etiqueta Solucion
Nombre = DLookup("[Nombre]","tblProductos","[CodigoProducto]='" & Me.Codigo & "'")
'Esta de arriba es la operación que lanzaba un error y detenía el programa

Solucion: 'Esta es la etiqueta a donde lleva el capturador de errores

If Nombre = "" Then 'Esta son las acciones que implemente cada quien pone las
'que necesite según su programa.
GoTo Accion
End If

Salir:
Exit Sub 'Esta etiqueta es importante para que no se haga un loop infinito
c***@gmail.com
2015-02-15 15:53:34 UTC
Permalink
El ejemplo es de mi programa discúlpame es que estoy trabajando y me paso este error y en esta pagina trate de buscar la solución pero luego encontre la que les puse.
Continúe leyendo en narkive:
Loading...