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
¿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