# Validar fechas



## el poder (Aug 8, 2005)

Que tal,

Tal vez parezca algo sencillo, pero no me funciona. Lo que quiero es introducir una fecha inicial y una final. Después de poner la inicial quiero que la final se valide de tal forma que sea mayor a la inicial.

He intentado con la opción de Datos->Validación:

Permitir: Fecha
Datos: Mayor que
Fecha Inicial = G4

Y excel me deja introducir cualquier fecha.

Bueno, muchas gracias por adelantado.

P.D. Perdón se me olvidaba comentar que utilizo un formato personalizado:
dddd, d mmmm aaaa y establezco la fecha con un control y no con el teclado ni enter.


----------



## bmacias (Aug 8, 2005)

Hola,

tengo ententido que Validación no funciona cuando el valor a la celda es agregado a través de un método automático.

HTH

Benjamín


----------



## LEONEL (Aug 8, 2005)

Hola! el poder
suponiendo que quieras validar desde A1:A20 a manera de ejemplo,
selecciona desde A1:A20, da un ENTER para que se seleccione la segunda
celda (A2), ahora del menu Datos > Validacion en la lista desplegable selecciona la de hast abajo personalizada 
en formula pon.

=click en A2 (escribe el signo) > click en A1
te queda asi
=A2>A1

si quieres poner mensajes ponlos y luego aceptar para salir


----------



## Greg Truby (Aug 9, 2005)

No sé qué tipo de control está usando.  Pero si está usando un control como *Calendar Control 10.0* entonces se puede programar el control para que rechaze ciertos valores.

<font face=Courier New><SPAN style="color:#00007F">Private</SPAN> <SPAN style="color:#00007F">Sub</SPAN> Calendar1_BeforeUpdate(Cancel <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Integer</SPAN>)
    <SPAN style="color:#00007F">If</SPAN> Calendar1.Value < [A2] <SPAN style="color:#00007F">Then</SPAN> Cancel = <SPAN style="color:#00007F">True</SPAN>
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN></FONT>


----------



## el poder (Aug 15, 2005)

Muchas Gracias Greg,

Como dices, estoy usando el calendar control. Sin embargo la validación no la hago para una sola celda, sino para toda la columna.

¿Cómo podría extender tu sugerencia para validar toda la columna?

Gracias otra vez y disculpa las molestias.


----------



## Greg Truby (Aug 15, 2005)

Hay que saber más sobre su situación para poder recomendar una solución.  ¿Hay muchos controles de calendario vinculado a varios celdas?  ¿O hay un solo control de calendario sin celda vinculado y usted poner el valor por medio de VBA?  ¿El control [los controles] está[n] ubicado como objeto encima de la hoja (worksheet) o en un UserForm?


----------



## el poder (Sep 6, 2005)

Que tal Greg, 

Perdona la tardanza. Creo que es la segunda opción. Tengo un control de calendario y pongo el valor por medio de VBA. La forma es más o menos la siguiente. Funciona seleccionando una fecha y después aprieto ACEPTAR.Libro1CDEFGHI8Septiembre9DomLunMarMiJueVieSb102829303112311456789101211121314151617131819202122232414252627282930311523456781617ACEPTARCANCELARHoja1

Como introduzco una fecha anterior y otra posterior, lo ideal sería que validara que la fecha posterior. El código (que no es mío) te lo anexo:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>SAR - Seguimento de Asuntos - V2.0_UserForm2.htm</title><style type=text/css><!--
body {background-color: #ffffff; color: #000000; font-family: "Courier New"; font-size: 10pt}
.keyword {background-color: #ffffff; color: #000080}
.comment {background-color: #ffffff; color: #008000}
--></style></head><body><nobr><div></div><div></div><div><span class="keyword">Option Explicit</span></div><div><span class="keyword">Dim</span> dDate<span class="keyword">As Date</span></div><hr size="1"><div></div><div><span class="keyword">Private Sub</span> Calendar1_Click()</div><div></div><div><span class="keyword">End Sub</span></div><hr size="1"><div></div><div><span class="keyword">Private Sub</span> CommandButton1_Click()</div><div>Calendar1 = Date</div><div>SpinButton1 = 0</div><div>SpinButton2 = 0</div><div>SpinButton3 = 0</div><div><span class="keyword">End Sub</span></div><hr size="1"><div></div><div><span class="keyword">Private Sub</span> CommandButton2_Click()</div><div><span class="comment">'Place the date from the calendar into the active cell</span></div><div><span class="keyword">Dim</span> cancel<span class="keyword">As Integer</span></div><div></div><div>    ActiveCell.Value = Calendar1.Value</div><div></div><div><span class="comment">'Prueba de validación de fechas</span></div><div></div><div><span class="keyword">If</span> ActiveCell.Value< [G11]<span class="keyword">Then</span> cancel =<span class="keyword">True</span></div><div></div><div></div><div><span class="comment">'Prueba de validación de fechas</span></div><div><span class="comment">'Dismiss the userform</span></div><div>    Unload Me</div><div></div><div>    ActiveCell.Offset(0, 1).Select</div><div></div><div><span class="comment">'ActiveCell.Offset(0, -2) = networkdays(ActiveCell.Offset(0, -3), ActiveCell.Offset(0, -1))</span></div><div><span class="comment">'   ActiveCell.Offset(0, -2) = Application.Dia.lab(ActiveCell.Offset(0, -3), ActiveCell.Offset(0, -1))</span></div><div><span class="keyword">End Sub</span></div><hr size="1"><div></div><div><span class="keyword">Private Sub</span> CommandButton3_Click()</div><div></div><div>Unload Me</div><div></div><div><span class="keyword">End Sub</span></div><hr size="1"><div></div><div><span class="keyword">Private Sub</span> SpinButton1_Change()</div><div><span class="keyword">If</span> SpinButton1 >= -1<span class="keyword">And</span> SpinButton1 _</div><div><= 1<span class="keyword">Then</span> dDate = Calendar1</div><div>TextBox1 = SpinButton1</div><div>Calendar1 = DateAdd _</div><div>("m", TextBox1.Value, dDate)</div><div>UpdateCell</div><div><span class="keyword">End Sub</span></div><hr size="1"><div></div><div><span class="keyword">Private Sub</span> SpinButton2_Change()</div><div><span class="keyword">If</span> SpinButton2 >= -1<span class="keyword">And</span> SpinButton2 _</div><div><= 1<span class="keyword">Then</span> dDate = Calendar1</div><div>TextBox2 = SpinButton2</div><div>Calendar1 = DateAdd _</div><div>("ww", TextBox2.Value, dDate)</div><div>UpdateCell</div><div><span class="keyword">End Sub</span></div><hr size="1"><div></div><div><span class="keyword">Private Sub</span> SpinButton3_Change()</div><div><span class="keyword">If</span> SpinButton3 >= -1<span class="keyword">And</span> SpinButton3 _</div><div><= 1<span class="keyword">Then</span> dDate = Calendar1</div><div>TextBox3 = SpinButton3</div><div>Calendar1 = DateAdd _</div><div>("d", TextBox3.Value, dDate)</div><div>UpdateCell</div><div><span class="keyword">End Sub</span></div><hr size="1"><div></div><div><span class="keyword">Private Sub</span> UpdateCell()</div><div>ActiveCell = Calendar1</div><div>ActiveCell.NumberFormat _</div><div>= "dddd, d mmmm yyyy"</div><div><span class="keyword">End Sub</span></div><hr size="1"><div></div><div></div><div><span class="keyword">Private Sub</span> UserForm_Initialize()</div><div>UserForm1.Calendar1.Value = Date</div><div><span class="keyword">End Sub</span></div><div></div><div></div><div></div></nobr></body></html>

Gracias por tu tiempo y paciencia.


----------



## Greg Truby (Sep 6, 2005)

Hola poder,

Bueno, una sugerencia sería poner nombres más descriptivos usando las convenciones de Hungría. CommandButton2 debe tener un nombre como btnAceptar o btnCancelar.  Los Spin Buttons deben tener nombres como spnAno, spnMes, spnDia o lo que sea.  Asi como son, otro programador no tiene idea para qué son.

Bueno, si comprendo bien su situación, creo que el código para el botón de aceptar debe de ser algo parecido a:


```
Private Sub btnAceptar_Click()
'Place the date from the calendar into the active cell

   If Calendar1.Value >= ActiveCell.Offset(0,-1) Then
      ' Value is OK, enter into cell.
      ActiveCell = Calendar1.Value
   Else
      MsgBox "Fecha Invalida"
      ActiveCell.ClearContents
      Exit Sub                                         ' |--¿xsub?-->
   End If

   'Dismiss the userform
   Unload Me
End Sub
```


----------



## el poder (Sep 7, 2005)

Muchas Gracias Greg!

Funcionó perfectamente tu código.

Y como mencionas trataré de seguir las convenciones de Hungría.

Por cierto, traté de buscar en el google, pero no encontré algo al respecto.

Saludos y Gracias nuevamente por tu tiempo.


----------



## Greg Truby (Sep 7, 2005)

Aquí está un vínculo para la página de Gregory Reddick.


----------

