Validaciones

Hola Fernando.. Ayudame a resolver esta duda.. Tengo el siguiente código.. Pero quiero que al pulsar Enter me aparezca un mensaje de texto que advierte sobre la validación..¿Cómo le hago?
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strValor As String
Dim Correcto As Boolean
'Garantizamos que sea una sola celda
If Target.Count = 1 Then
strValor = Target.Value
Select Case Target.Address(False, False)
Case "A1"
If Val(strValor) >= 1 And Val(strValor) <= 100 Then
Correcto = True
End If
Case "B1"
If Len(Trim(strValor)) > 0 And Val(strValor) = 0 Then
Correcto = True
End If
End Select
If Not Correcto Then
Application.EnableEvents = False
Target.Interior.ColorIndex = 3
Target.Select
Application.EnableEvents = True
Else
Target.Interior.ColorIndex = 0
End If
End If
End Sub

1 respuesta

Respuesta
1
En realidad, no me queda muy claro qué deberá decir el mensaje. Además, ¿SIEMPRE qué se presione Enter, tiene que aparecer el mensaje?.
Si así fuera, ubica dentro de tu macro estas dos líneas de código:
Application. OnKey "~", "MiMens" ' Enter del teclado de letras
Application.OnKey "{ENTER}", "MiMens" 'Intro del teclado numérico
Estas dos líneas, disparan la subrutina "MiMens" cada vez que se presiona Enter/Intro
Tal rutina muestra un mensaje personalizado. Pégala a continuación del End sub, en el mismo módulo, de tu rutina principal:
Public Sub MiMens()
Dim Mensaje, Stylo, Tit
Mensaje = "Sandra:" & Chr(10) & "reemplaza esto con tu mensaje sobre la validación"
Stylo = vbInformation
Tit = "__*__ADVERTENCIA: EXISTE VALIDACION__*__"
Respuesta = MsgBox(Mensaje, Stylo, Tit)
Application.OnKey "{ENTER}"
End Sub
Espero que esto te haya servido. Dime si no.
Un beso!
Fernando
Mira Nando.. lo que estoy tratando de validar en el caso A1 es una celda numérica y en la celda B1 es una celda de texto.. lo que deseo es que si al ingresar en A1 un texto y al pulsar enter me debe mostrar un mensaje de advertencia sobre el dato que estoy tratando de ingresar es incorrecto, osea este mensaje debe aparecer solamente cuando el dato ingresado es incorrecto... en cuanto al código que me enviaste no supe como insertarlo dentro de mi módulo lo que hice fue lo siguiente:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
'aqui va mi codificación
end sub
Application.OnKey "~", "MiMens" ' Enter del teclado de letras
Application.OnKey "{ENTER}", "MiMens" 'Intro del teclado numérico
Public Sub MiMens()
'aqui va el mensaje
end sub
Bueno esto es lo que entendí...¿cómo lo hago?
OK, Sandra!
Ya me parecía que no era conveniente destinar una tecla tan frecuente, como lo es Enter, para mostrar un mensaje.
El macro que me enviaste primero está evaluando constantemente los cambios realizados en esas celdas. Por esta razón, no es necesario considerar Enter, simplemente, cuando se cumpla la condición de Error, la celda se pinta de rojo, y allí puede aparecer el mensaje de error.
Si estás de acuerdo, este debería ser tu código:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strValor As String
Dim Correcto As Boolean
'Garantizamos que sea una sola celda
If Target.Count = 1 Then
strValor = Target.Value
Select Case Target.Address(False, False)
Case "A1"
If Val(strValor) >= 1 And Val(strValor) <= 100 Then
Correcto = True
End If
Case "B1"
If Len(Trim(strValor)) > 0 And Val(strValor) = 0 Then
Correcto = True
End If
End Select
If Not Correcto Then
Application.EnableEvents = False
Target.Interior.ColorIndex = 3
Target.Select
MiMens '<-- llama a mensaje
Application.EnableEvents = True
Else
Target.Interior.ColorIndex = 0
End If
End If
End Sub
Public Sub MiMens()
Dim Mensaje, Stylo, Tit
Mensaje = "Sandra:" & Chr(10) & "reemplaza esto con tu mensaje sobre la validación. Ejemplo: Debe ingresar un número positivo menor que 100"
Stylo = vbInformation
Tit = "__*__ADVERTENCIA: EXISTE VALIDACION__*__"
Respuesta = MsgBox(Mensaje, Stylo, Tit)
Application.OnKey "{ENTER}"
End Sub
Reemplaza los textos entre comillas con el mensaje y titulo que consideres apropiado.
Prueba este código y no dejes de comentarme si funcionó.
Besos!
Fernando
Funciona bien pero el mensaje que quiero poner es que tenga la opción reintentar y cancelar, lógicamente que al cancelar se borra el contenido de la celda y al reintentar se seleccione la celda, ¿dónde realizo el cambio?, otra cosa es que en todas las celdas aparece el mensaje lo correcto debería ser que aparezca sólo en las celdas validadas ¿cómo hago esto?
OK un paso más adelante. Este sería el código con las opciones que pediste.
De todos modos, el código que copiaste primero ya preveía sleccionar la celda en cuestión, con lo cual la opción reintentar es inocua.
De todos modos, si observas detenidamente el código, puedes agregarle a esa opción otra tarea que te interese hacer.
Reemplaza el viejo MiMens(9 por este:
Public Sub MiMens()
Dim Mensaje, Stylo, Tit
Mensaje = "Debe ingresar un número positivo menor que 100" & Chr(10) & "Reintentar le permite ingresar uno nuevo" & Chr(10) & "Cancelar borra el conteneido de la celda"
Stylo = vbCritical + vbRetryCancel
Tit = "__*__VALOR INGRESADO ERRONEO__*__"
respuesta = MsgBox(Mensaje, Stylo, Tit)
If respuesta = vbRetry Then
Target.Select
ElseIf respuesta = vbCancel Then
Application.EnableEvents = False
Target.ClearContents
End If
End Sub
---
Lo extraño de tu pregunta es que el mensaje aparezca en todas las celdas... El mensaje aparece en el centro de la pantalla cuando alguna de las condiciones que TU le definiste se cumplan...
Bueno, fíjate si esto te sirve.
Un beso!
Fer
Disculpame Fernando por seguir aquí, pero en el nuevo código que me enviaste no reconoce a Target, lo declaré dentro de la función pero no pasa nada.
Como Target no está disponible para las otras subrutinas, incluiremos el proceso de mensaje dentro del código principal.
Así tu código final (?) Será:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strValor As String
Dim Correcto As Boolean
Dim Mensaje, Stylo, Tit
'Garantizamos que sea una sola celda
If Target.Count = 1 Then
strValor = Target.Value
Select Case Target.Address(False, False)
Case "A1"
If Val(strValor) >= 1 And Val(strValor) <= 100 Then
Correcto = True
End If
Case "B1"
If Len(Trim(strValor)) > 0 And Val(strValor) = 0 Then
Correcto = True
End If
End Select
If Not Correcto Then
Application.EnableEvents = False
Target.Interior.ColorIndex = 3
Target.Select
Mensaje = "Debe ingresar un número positivo menor que 100" & Chr(10) & "Reintentar le permite ingresar uno nuevo" & Chr(10) & "Cancelar borra el conteneido de la celda"
Stylo = vbCritical + vbRetryCancel
Tit = "__*__VALOR INGRESADO ERRONEO__*__"
respuesta = MsgBox(Mensaje, Stylo, Tit)
If respuesta = vbRetry Then
Target.Select
ElseIf respuesta = vbCancel Then
Application.EnableEvents = False
Target.ClearContents
End If
Application.EnableEvents = True
Else
Target.Interior.ColorIndex = 0
End If
End If
End Sub
Espero que esto resuelva tu problema. Si no, aquí estoy.
Un beso!
Fer
Muchas gracias fernando por todo lo que has hecho por mi, verdaderamente me has guiado por este difícil camino. Un fuerte abrazo a la distancia y un Dios te bendiga grandemente, cuídate y hasta luego.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas