Te anticipo que de Excel no tengo ni idea. Los auténticos maestros son Dante y Elsa. Pero por si te puede dar una idea, en este caso en Access, si tengo el formulario Reservas y en un predio que ya está y escribo una fecha comprendida entre las fecha de otra reserva de ese mismo predio
Puedes ver que el cursor aún está en el control Entrada. Como la fecha que he escrito está comprendida entre otra fecha de entrada y salida del mismo predio, cuando pulse Enter
Al aceptar, el cursor se vuelve al control Entrada para que la modifique.
En caso de que fuera la Salida la que está comprendida entre la entrada y salida de otro registro del mismo predio
Cuando pulsar Enter( o el control Salida perdiera el enfoque)
Por último, vamos a suponer que pongo una fecha de entrada anterior a las reservas que hay y otra fecha de salida mayor a las reservas que hay. En este caso, las fechas intermedias, desde el 10/10/2022 hasta el 16/10/2022 ya estarían cogidas
Cuando escribiera la nueva fecha de salida y pulsara Enter, me aparecería ese mensaje. Al Aceptar el cursor se volvería al control Salida para que cambies las fechas.
En este caso, repito, en este caso yo uso como código
Private Sub Entrada_BeforeUpdate(Cancel As Integer)
If Entrada >= DLookup("entrada", "reservas", "predio='" & Me.Predio & "'") And Entrada <= DLookup("salida", "reservas", "predio='" & Me.Predio & "'") Then
MsgBox "No puede ser, esa fecha de ENTRADA, en el predio " & UCase(Predio) & " ya está cogida", vbOKOnly + vbExclamation, "Tendrá que dormir en la calle"
Cancel = True
End If
End Sub
Private Sub Salida_BeforeUpdate(Cancel As Integer)
If Salida >= DLookup("entrada", "reservas", "predio='" & Me.Predio & "'") And Salida <= DLookup("salida", "reservas", "predio='" & Me.Predio & "'") Then
MsgBox "No puede ser, esa fecha de SALIDA, en el predio " & UCase(Predio) & " ya está cogida", vbOKOnly + vbExclamation, "Que se busque otro hotel"
Cancel = True
End If
If DCount("*", "reservas", "entrada<=#" & Me.Entrada & "# and salida<=#" & Me.Salida.Text & "# and predio='" & Me.Predio & "'") Then
MsgBox "Imposible, hay fechas intermedias ya cogidas", vbOKOnly + vbInformation, "Tendrá que cambiar las fechas"
Cancel = True
End If
End Sub
Dicho todo esto, sigue mi consejo. Pregúntale a Dante o a Elsa.