Y a mí no me queda claro dónde quieres pegar los resultados ('... los resultados en otra hoja u otro archivo...')
Entonces imaginaré que el otro archivo se llama libro2 y la hoja es la Hoja1... creo que esos textos podrás encontrarlos fácilmente y ajustarlos a los nombres reales.
Sub Add_Control()
Dim miCelda As Range
Dim FilaLibre As Long
Dim tipoMov As String
Set miCelda = [datos] 'ATENCIÓN
'defino otro libro ya abierto y busco la primer fila libre para el relleno
Set destino= Workbooks(libro2).Sheets("Hoja1")
FilaLibre = destino.Cells(65536, miCelda.Column).End(xlUp).Row + 1
tipoMov = Application.Caller ' bEntrada o bSalida, según el botón pulsado
If tipoMov = "bEntrada" Then
' Buscar primera fila libre (del 2do libro) y rellenar
'FilaLibre = destino.Cells(65536, miCelda.Column).End(xlUp).Row + 1 'ya está encontrada la fila libre
destino.Cells(FilaLibre, miCelda.Column).Value = [codemp]
destino.Cells(FilaLibre, miCelda.Column).Offset(0, 1).Value = [nomemp]
destino.Cells(FilaLibre, miCelda.Column).Offset(0, 2).Value = Now()
Else
' Buscar (en 2do libro) la última entrada de este empleado que no tenga hora de salida y rellenar
Do While FilaLibre > [datos].Row 'ATENCIÓN
FilaLibre = FilaLibre - 1
If destino.Cells(FilaLibre, miCelda.Column).Value = [codemp] Then
If destino.Cells(FilaLibre, miCelda.Column).Offset(0, 3).Value = "" Then
destino.Cells(FilaLibre, miCelda.Column).Offset(0, 3).Value = Now()
Exit Do
End If
End If
Loop
End If
End Sub
Hay una línea que dice:
Set destino= Workbooks(libro2).Sheets("Hoja1")
Si la idea es copiar los datos en otra hoja del mismo libro no hace falta nombrar el libro por lo que la instrucción solo será:
Set destino=Sheets("Hoja1") 'Ajustar nombre de hoja
Pero si vas a copiar datos en otro libro, debes tenerlo abierto y reemplazar el texto libro2 por el nombre completo, por ej:
Set destino = Workbooks("EMPLEADOS.xlsm").Sheets("Hoja1")
Ahora, la fila libre se busca en la hoja destino. Y tus datos están en tu hoja de origen, entonces no tiene sentido que preguntes si la fila destino es > fila de origen porque estás en distintas hojas..
Do While FilaLibre > [datos].Row
Algo similar sucede con la columna de destino... aunque aquì tendría sentido que se trate de la misma columna que en el origen.
Armala y probala. Si luego resulta que tu tema es otro y estás montándote en una macro que no es para este caso y requieres de otra macro lo ideal es que dejes bien en claro dónde deseas pegar los resultados y cómo.