Macro: aviso o cartel señalando un error

Estimados, buenas tardes.
Uso el excel en mi trabajo. Necesito hacer lo siguiente: cuando una determinada fórmula me de distinto de cero, necesito que se abra un cartel o un aviso, bien visible, anunciando que "Existe un Error".
Es importante esto para mi, ya que de avisarme que hay un error lo corrijo al momento y no luego de varios días, que como es una hoja muy compleja se puede complicar mucho encontrar donde está la diferencia.
Otra pregunta, siguiendo con el tema; una vez que el error fue subsanado, el aviso desaparece automáticamente o no.
Disculpen mi ignorancia en todo esto.
Muchas Gracias a todos

1 Respuesta

Respuesta
1
Es posible siempre y cuando identifiques las celdas o rangos de celdas en que se almacenan los resultados de dichas fórmulas.
El mensaje de error es enviado sólo para la condición puesta (uno de los resultados es distinto de cero), en caso de que esta condición no se dé, el mensaje no aparece.
Espero tu respuesta para saber las celdas en que van los resultados y si lo quieres para una hoja o para varias. Si es para varias, lo ideal sería que en cada hoja las fórmulas estén en las mismas celdas o rango de celdas.
Hola y gracias.
En principio el mensaje iría referido sobre una hoja.
La fórmula en cuestión es esta: =+R263-'Cúmulos 2008-2009'!F727
Esta fórmula me tiene que dar cero siempre, funciona como un dígito verificador. Al no dar cero, significa que hay un error, y como la planilla es tan grande y compleja se me ocurrió la idea de que cuando de un numero dostinto de cero aparezca inmediatamente una alerta.
Desde ya muchas gracias.
PD: intenté haciendo una validación, pero no hubo forma. Creo que la validación funciona para el caso en que vayas metiendo tu los datos en una lista determinada, que no es esto.
1. ¿Cuántas celdas utilizan esa fórmula?
        ¿Muchas?
        ¿Pocas?
2. ¿Es variable el número de celdas que la utilizan o siempre son las mismas?
        Si siempre son las mismas ¿Cuáles son?
3. ¿Las fórmulas son acupadas en una columna o fila determinada, o en cualquier lugar?
        Si es una columna o fila determinada ¿Cuál es esa columna o fila?
Necesito saber la respuesta a estas preguntas para evaluar qué tan genérica debe ser la macro.
Por favor, responde de forma precisa a cada pregunta.
1) Muchas
2) Variable
3) La columna R, en cuanto a la fila, esta va cambiando; es decir se va corriendo hacia abajo a medida que voy agregando clientes en otra parate de la hoja.
Espero que así esté bie respondido. Gracias
Esta macro te buscará un valor dado en el rango dado de una hoja dada y enviará el mensaje que le indiques si encuentra el valor (seleccionará la celda en que encuentre el valor).
HojaBusq: Hoja en la que vas a buscar
StrRango: Rango de celdas en que va a buscar
Valor: El valor quese debe buscar
StrMensaje: El mensaje que se debe mostrar (si está vacío no se muestra mensaje)
Sub subBuscar(hojaBusq As Worksheet, _
              strRango As String, _
              valor, _
              Optional strMensaje As String = "")
    Set resulta = hojaBusq.Range(strRango).Find(valor, LookIn:=xlValues, LookAt:=xlWhole)
    If Not resulta Is Nothing Then
        hojaBusq.Select
        resulta.Select
        If strMensaje <> "" Then MsgBox strMensaje, vbCritical, "Alerta"
    End If
End Sub
En tu caso podrías llamar la macro de la siguiente forma (en la sección de código de la hoja en que tienes los datos):
Private Sub Worksheet_Change(ByVal Target As Range
     subBuscar activeSheet, "R:R", 0, "Error en la fórmula"
End Sub

Cualquier duda, me consultas.
La macro anterior busca los ceros, pero me di cuenta que lo que quieres es buscar los lugares en que no hay ceros aquí te dejo la macro correcta.
Sub subBuscar(hojaBusq As Worksheet, _
              strColumna As String, _
              valor, _
              Optional strMensaje As String = "")
    Dim i
    Dim Rng As Range
    Set Rng = hojaBusq.UsedRange.Columns(strColumna)
    For i = Rng.Row To Rng.Rows.Count
        If Rng.Cells(i, 1) <> valor Then
            Rng.Cells(i, 1).Select
            If strMensaje <> "" Then MsgBox strMensaje, vbCritical, "Alerta"
            Exit For
        End If
    Next
End Sub

Habría que llamarla casi de la misma forma, lo único que varía es que en lugar de entregarle el rango, le entregas la columna en la que se realiza la búsqueda.
Private Sub Worksheet_Change(ByVal Target As Range
     subBuscar activeSheet, "R", 0, "Error en la fórmula"
End Sub
Oye muchas gracias primero por la paciencia y segundo por lo que uno aprende.
Y hablando de paciencia... ¿esto qué tu me mandas donde lo escribo? , se que es VB.
Te pido disculpas, porque ya me da vergüenza.
¿Y supongo que donde pones por ejemplo "hojaBusq" tengo que poner el nombre de mi hoja?
Casi me desilusiono con esto, pero luego pensé... ya que empecé, lo quiero terminar. Sobre todo si me ayuda un experto.
Gracias, gracias
Del código de subBuscar, no hay nada que cambiar, ese queda intacto. Te recomiendo guardarlo en un módulo.
Pasos:
1. Si estás en excel, Alt+F11 para ir al editor de visual basic.
2. Una vez en el editor te vas a Insertar>Modulo.
3. En la sección en blanco que aparece pegas este código intacto:
Sub subBuscar(hojaBusq As Worksheet, _
              strColumna As String, _
              valor, _
              Optional strMensaje As String = "")
    Dim i
    Dim Rng As Range
    Set Rng = hojaBusq.UsedRange.Columns(strColumna)
    For i = Rng.Row To Rng.Rows.Count
        If Rng.Cells(i, 1) <> valor Then
            Rng.Cells(i, 1).Select
            If strMensaje <> "" Then MsgBox strMensaje, vbCritical, "Alerta"
            Exit For
        End If
    Next
End Sub


4. Aun en el editor de código, en la parte superior izquierda, en el examinador de proyecto, haz doble clic en la hoja en que quieres que se validen los datos.
5. En la sección de código (que debe estar en blanco), pega este código:
Private Sub Worksheet_Change(ByVal Target As Range)
     subBuscar activeSheet, "R", 0, "Error en la fórmula"
End Sub

Si la columna en la que vas a buscar es la "R", el valor correcto de la fórmula es 0 y quieres dejar el mensaje "Error en la fórmula" cuando haya un error, debes conservar el código tal cual.
----------------------
Si tienes alguna duda, sólo pregunta, no te preocupes... que no es molestia.
La primera parte la he hecho.
En cuanto a:
5. En la sección de código (que debe estar en blanco), pega este código:
Private Sub Worksheet_Change(ByVal Target As Range)
     subBuscar activeSheet, "R", 0, "Error en la fórmula"
End Sub
No se donde está la sección de código.
Saludos y gracias
Me imagino que ya estás en el editor de VB, el entorno te muestra:
- Los menúes en la parte superior
- Los distintos paneles en la parte izquierda
- Una sección blanca (o gris, si no has seleccionado la hoja) que ocupa el resto de la pantalla debajo de los menúes y a la derecha de los paneles. Esa es la sección de código.
¿Pudiste agregar el código del módulo? Si ya lo hiciste, agregar el código de la hoja es semejante a eso, pero habiendo seleccionado una hoja desde el examinador de proyectos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas