No sobrescribir en celda llena y muestre mensaje excell

Tengo form1 con txtcode, 2 botones de cmdentrada y cmdsalida, labelhora y txthoy. Una hoja1 Asistencia con A código, B fecha, C hora entrada y D hora salida, una persona ingresa y se registra en el form con su código y click en Cmdentrada aquí no hay problema es en la salida, lo que deseo es que cuando marque una sola vez ysu salida no sobrescriba la hora de salir y muestre un mensaje que ya marcó su salida, aquí desarrollé el codigo pero me muestra el mensaje y sobrescribe, favor ayuda.

PRIVATE SUB CMDSAL()

Ind=0

Sheets("ASISTENCIA").select

Set Busca=Sheets("ASISTENCIA").Range("A:A").Find(txtcode, lookin:=xlvalues,lookat:=xlwhole)

If not mibusca is nothing then

Pcoincid=mibusca.address

Do

If mibusca.offset(0,1)=txthoy.value then

If mibusca.offset(0,3)="" then

mibusca.select

Ind=1

End If

End If

Set mibusca=activesheet.range("A:A"),findnext(mibusca)

Loop while not mibusca is nothing and mibusca.address<>Pcoincid

and Ind=0

Labelhora.caption=format(now,"hh:mm")

Mibusca.offset(0,2)=format(now,"hh:mm")

Else

Msgbox "UD YA SE REGISTRÓ "

Endif

Endif

Set mibusca=nothing

End sub

1 respuesta

Respuesta
3

En primer lugar declaras una variabla Busca pero luego haces uso de mibusca.

Luego con Mibusca.offset(0,2)= intentas guardar la hora en la col de entrada y no salida.

Así debiera quedarte la macro:

Private Sub CommandButton1_Click()
Ind = 0
Sheets("ASISTENCIA").Select
Set miBusca = Sheets("ASISTENCIA").Range("A:A").Find(Txtcode, LookIn:=xlValues, lookat:=xlWhole)
If Not miBusca Is Nothing Then
    Pcoincid = miBusca.Address
    Do
    If miBusca.Offset(0, 1) = CDate(txthoy.Value) Then
        If miBusca.Offset(0, 3) = "" Then
           'si no tiene hora marcada en salida
            Label1.Caption = Format(Now, "hh:mm")
            miBusca.Offset(0, 3) = Format(Now, "hh:mm")  'COL 3
            Ind = 1
        End If
    End If
    Set miBusca = ActiveSheet.Range("A:A").FindNext(miBusca)
    Loop While Not miBusca Is Nothing And miBusca.Address <> Pcoincid And Ind = 0
    'si la variable quedó vacía significa que ya está registrada la hora
    If Ind = 0 Then
        MsgBox "UD YA SE REGISTRÓ "
    End If
Else
    'no se encontró registro con datos ingresados
    MsgBox "No se encuentra este registro."
End If
Set miBusca = Nothing
End Sub

Observa que también le agregué un mensaje para cuando no encuentra el registro buscado.

Solo cambia el nombre del botón que llama a esta macro.

PD) Te invito a mirar el video 11 de mi canal.... Allí verás algunas pautas que debieras tener en cuenta, como la no necesidad de seleccionar una celda antes de mover un dato y otros trucos más.

Corregí los errores, copie tu macro a pesar que está vacía la celda a llenar sale msg de que ya registró su salida, favor comprobar macro, muchas gracias.

Las macros de mis respuestas siempre van probadas sobre un modelo, ya sea el real del usuario o como en este caso un modelo que recree siguiendo notas de tu consulta. Primero inicié un formulario, le coloqué los controles mencionados, cargué una hoja con datos siguiendo tus notas y luego de probada se te envió la macro resultante.

Si no funciona tal lo esperado, evidentemente el modelo que resultó luego de seguir tus notas en el inicio de la consulta no coincide con tu modelo real o tienes más macros que afectan el resto del código.

Si no puedes ajustarla, favor de dejar en un sitio de descarga o enviarme a mi correo tu libro para adaptar el código.

Mis correos aparecen en portada de mi sitio que dejo al pie... puedes utilizar el de cibersoft PUNTO arg ARROBA gmail.com

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas