Hola, aunque no es perfecto, es la idea, así mas o menos funciona,
Código vb:
Ver originalPublic Function CronoCero(Optional Segundos As Integer) As String
' Si se le indica Segundos, activa el contador
' Siempre Devuelve los segundos que faltan
Static HoraLimite As Date
If Segundos > 0 Then HoraLimite = DateAdd("s", Segundos, Now) ' Ahora + Segundos
CronoCero = Format(HoraLimite - Now, "SS")
End Function
Public Sub PruebaCronometro()
CronoCero 30 'Inicia el cronómetro durante 30 segundos
Do
' En este bucle se efectuaría el proceso deseado
' comprobando si el crono ha llegado al limite para salir del bucle
Range("A1") = CronoCero
If Val(CronoCero) = 0 Then Exit Do
Loop
Range("A1") = ""
End Sub
Te comento que generalmente para esto se utilizaría un formulario con un Timer, pero he intentado solucionarlo así porque por lo que intuyo de momento estás utilizando sólo código.
En cuanto a lo del bloqueo, evidentemente es por el Bucle, por eso te había comentado que este 'crono' debe de ser llamado desde dentro del proceso que estás ejecutando.
Dependiendo de las necesidades, sería la manera de llamarlo. Ten presente que el Do/Loop bloque el sistema mientras no salgas del mismo con alguna instruccion adecuada.
Saludos