Macro de aviso

Que tal Fejoal, Oye, ¿Cómo puedo hacer una macro para que:
1° Estando en la Hoja3, cuando en la celda "T33" de la Hoja4 tenga un cierto valor, ¿me aparezca un mensaje avisándome de éste valor en la Hoja3?
2° Si se pudiera que en lugar de los botones Aceptar, Cancelar, ¿me aparezca uno solo que diga "Ver Gráfica" y que me mande a la Hoja6?. De antemano, Muchas Gracias y Saludos.

1 Respuesta

Respuesta
1
Veamos...
Este tipo de mensaje de error equivale a decir que alguno de los elementos de la instrucción NO existe.
Objetivo es una variable y la celda T33 tiene que existir en cualquier hoja. Por lo tanto sólo cabe pensar que no existe una hoja llamada "Hoja10". Tal vez tenga un espacio atrás, o no se llame así.
Tener en cuenta que no es lo mismo el numero de código de la hoja que su nombre(el que aparece en la solapa).
Puedes reconocerlos en el explorador de proyectos del Editor de VBA: El que aparece entre paréntesis es el nombre asignado a la hoja, mientras el que está a la izquierda del paréntesis es el nombre de código. De hecho pueden coincidir, pero no necesariamente siempre es así.
Puedes probar -también- renombrando la hoja y colocando ese exacto nombre en la variable "LaHoja".
Espero que con esto funcione.
Un abrazo!
Fernando
Muchísimas Gracias Fer, Lo que hice fue renombrar la hoja y ponerle en la solapa Hoja10, y así funcionó a la perfección. Recibe un gran abrazo de Querétaro, México.
Fejoal, Disculpa que siga preguntando, pero sigue marcando el mismo error, ésto es lo único que cambié en la macro y la puse en la Hoja1:
LaHoja = "Hoja10"
LaCelda = "T33"
Objetivo = "Punto Fuera de Límites en X"
HojaGraf = "Hoja14"
Marco un valor en la Hoja1 (que manda los datos a la Hoja10), y aparece el depurador, "Subíndice fuera del intervalo" y al darle aceptar, el depurador me marca aquí el error:
If Sheets(LaHoja).Range(LaCelda).Value = Objetivo Then
De antemano, Gracias.
Tal vez sea un error de tipeo pero la variable de destino es "Objetivo" (no "el Objetivo"). Controla que esté tal como está en la macro original.
No entiendo a qué te refieres con una máscara, pero si es un diseño de la hoja y no un formulario de BVA, no deberías tener problema alguno.
La celda T33 puede contner un dato o una fórmula condicional que devuelva un texto. En tal caso "Objetivo" deberá contener también un texto. Asegúrate que esté escrito exactamente igual que el resultado de aquella fórmula.
Prueba con esto y dime si funciona.
Un abrazo!
Fernando
Que tal Fejoal, copié la macro tal cual, pero no la puedo correr, al modificar cualquier dato, aparece el depurador. La Macro la puse en la Hoja 1, mis parámetros LaHoja="Hoja10", LaCelda="T33", el Objetivo=1, HojaGraf = "Hoja14", y el depurador se coloca en ésta instrucción:
If Sheets(LaHoja).Range(LaCelda).Value = Objetivo Then
No sé si tenga que ver, que en donde quiero que aparezca el mensaje, tengo una máscara que llena los datos de la Hoja10 y automáticamente se actualiza la fórmula de la "T33" (en Hoja10). Por otro lado, ¿Es lo mismo que en la fórmula de "T33", tenga la condicional SI y el valor resultante sea un texto?
De antemano, Muchas Gracias...
Faltaría definir en qué momento debe aparecer ese mensaje.
Asumiré que en T33 hay una fórmula y, por tanto asociaré la macro que muestra el mensaje al evento Calculate.
Desde luego, puedes elegir otro evento que te parezca más apropiado.
Para que funcione, activa el editor de Visual Basic (presiona Alt+F11) y busca
La hoja donde quieres que esto ocurra (¿Hoja3?). Da doble click sobre ella. (Otra forma de llegar a este punto es hacer click derecho sobre la solapa de esta hoja y elegir la opción "Ver Código)
Copia el código siguiente y pégalo en el panel desplegado a la derecha de su Editor de Visual Basic:
Private Sub Worksheet_Calculate()
'Ferelias, ingresa aquí los parámetros:
LaHoja = "Hoja4"
LaCelda = "T33"
Objetivo = 100
HojaGraf = "Hoja6"
If Sheets(LaHoja).Range(LaCelda).Value = Objetivo Then
Mensaje = "La celda " & LaCelda & " de la hoja " & LaHoja & Chr(10) & "tiene el valor: " & Sheets(LaHoja).Range(LaCelda).Value & Chr(10) & Chr(10) & "¿Qué desea hacer?" & Chr(10) & "Presione [Aceptar] para ir a la Gráfica" & Chr(10) & "o [Cancelar] para permanecer aquí..."
Mensaje = MsgBox(Mensaje, vbQuestion + vbOKCancel, "OBJETIVO ALCANZADO")
If Mensaje = vbOK Then Sheets(HojaGraf).Select
End If
End Sub
Nota que al comienzo de la macro existen variables que te permiten parametrizar tu macro.
La macro está prevista para comaparar una igualdad entre el valor de la celda T33 y un objetivo que le fijes como variable inicial. Sin embargo, según tu caso, puedes cambar el operador = por >= o <, etc.
Finalmente, si deseas cambiar el botón aceptar por uno que diga ver gráfica (en lugar del texto aclaratorio que agregué al mensaje) deberás crear un Userform con una etiqueta que despliegue el mensaje, un par de botones y asociar uno de ellos con la instrucción de desplazamiento a la hoja de la gráfica.
Si consideras que este grado de sofisticación se justifica házmelo saber y haré las modificciones necesarias...
Espero haberte audado.
Un abrazo!
Fernando

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas