Visual en Excel

Hola amigo deseo crear una validación personal en la hoja1 de mi libro en excel, específicamente lo que quiero es que cuando haga clic en cualquier celda de la hoja1 me aparezca un inputbox con el nombre de la celda seleccionada y el valor ingresado debe ir directamente hacia la celda seleccionada, pero las celdas estarán validadas al ingreso de números o textos... Si el valor ingresado en el inputbox númerica y la celda está validada en texto me debe dar un chance más ¿cómo hago esto amigo experto?
Gracias por tu esfuerzo a esta respuesta
1

1 Respuesta

200.900 pts.
¿Ya probaste la opción Datos | Validación?, en esta puedes valir las entradas que hace el usuario en las celdas...
En lo personal, cuando esta opción no satisface mis necesidades, realizo las validaciones dentro del evento Change de la hoja, lo que deseas se podría hacer en el evento SelectionChange pero no me parece eficiente, como tampoco el uso del InputBox, teniendo las mismas celdas para introducir datos y validarlos ahí mismo, por ejemplo, supongamos que en la celdas:
A1 = Numeros entre 1 y 100
B1 = Texto
C1 = Fecha
Para validar esto copia el siguiente código en el evento Change, después prueba a introducir valores diferentes de los especificados en las celdas respectivas, partiendo de esto, puedes adaptarlo a tus necesidades, para que por ejemplo, solo des las oportunidades que quieras, saludos...
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
Case "C1"
If IsDate(strValor) 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
Si he utilizado las opciones de validación de excel pero no me satisfacen... en cuanto al trabajo que me enviaste la celda "A1" no acepta valores numéricos sólo fechas así como "C1"... además como evito que al pulsar enter 2 o más veces me saque de la celda, otra cosa: como haría si tratara de validar un rango de datos ya sea por columnas o un grupo de celdas adyacentes y por últimome podrías explicar brevemente que hace la función "TARGET" que no encuentro en la ayuda de excel.
Gracias saludos de Sandra Castillo desde Lima - Perú
1) Con **la celda "A1" no acepta valores numéricos sólo fechas asi como "C1"** ¿Estas diciendo que el código que te envíe NO función?, por que en mi equipo hace lo que menciono, checa el formato de tu celda
2) Cuando dices **como evito que al pulsar enter 2 o más veces me saque de la celda**, en mi código YO no permito moverse al usuario si no introduce el valor correcto, pero si tu eliminas esta linea
Target.Select
La selección se moverá libremente, cuando programas tu eres un DIOS para la maquina, debe hacer lo que tu quieras
3) **Como haría si tratara de validar un rango de datos ya sea por columnas o un grupo de celdas adyacentes ** primero tienes que decidir CUANDO hacerlo, en el ejemplo que te envíe, DECIDÍ validar cada vez que el usuario introducía un valor, puede ser cuando una columna este llena completamente o una fila o celdas adyacentes
4) TARGET no es una función, Targe es un ARGUMENTO de varios EVENTOS de las hojas y el libro, en nuestro ejemplo
End Sub
Target trae una REFERENCIA a las celdas que fueron cambiadas (Change) y que desencadenan este evento, o sea, nos dice que celdas modifico el usuario...
Si eres mucho más explicita, te podre ayudar mucho más...
Bien... no me había fijado en el formato de la celda "A1", tenías toda la razón del mundo... todo está claro... sólo un detalle: cuando yo quise validar el rango de una columna "A1: A5" hice así case "A1","A2","A3","A4","A5"
Porque de otra forma no pude lograrlo, en este caso como debo utilizar el rango, yo probé así.
Case range("A1:A5").cells
pero nada que ver, e incluso a ese rango le puse de nombre datos, luego hice así:
Case "Datos"
pero nada que ver... ¿cómo le hago si fuese un rango del celdas en ambos casos mencionados?
Option Explicit
'Recuerda que Target nos devuelve las celdas que fueron
'modificadas por el usuario, o sea, la REFERENCIA a esas
'celdas, si tu quieres valida que este dentro del rango
'A1:A5 hay varias maneras veamos algunas, los codigo que
'te escriba a continuacion, recuerda que van dentro del
'evento Change y cada uno es diferente, es decir, prueba
'uno por uno
'Private Sub Worksheet_Change(ByVal Target As Range)
'Aqui va el codigo
'End Sub
'Primera opcion, cuando cada celda contendra valores diferentes
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strDireccion As String
strDireccion = Target.Address(False, False)
Select Case strDireccion
Case "A1"
'codigo para este caso
Case "A2"
'codigo para este caso
Case "A3"
'codigo para este caso
Case "A4"
'codigo para este caso
Case "A5"
'codigo para este caso
End Select
End Sub
'Segunda opcion: cuando es la misma validacion para todas las celdas
'del rango
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strDireccion As String
strDireccion = Target.Address(False, False)
Select Case strDireccion
Case "A1", "A2", "A3", "A4", "A5"
'Aqui va el codigo para este caso
End Select
End Sub
'Tercera opcion, usando las columnas y filas
Private Sub Worksheet_Change(ByVal Target As Range)
Dim intCol As Integer
Dim lngFila As Long
intCol = Target.Column
If intCol = 1 Then 'La columna 1 = A
lngFila = Target.Row
Select Case lngFila
Case 1
Case 2
Case 3
Case 4
Case 5
End Select
End If
End Sub
'Cuarta opcion, usando las columnas y filas
Dim intCol As Integer
Dim lngFila As Long
intCol = Target.Column
If intCol = 1 Then 'La columna 1 = A
lngFila = Target.Row
Select Case lngFila
Case 1 To 5
'Misma condicion para las cinco celdas
End Select
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas