Averiguar si un libro Excel en el servidor está abierto

Tengo la siguiente duda y no sé por donde empezar a solucionarla. Voy a intentar explicarlo de la mejor manera posible.

Tengo un "libro A" en una carpeta compartida de un servidor en el trabajo. Este libro puede ser abierto, consultado y modificado por varias personas. Para evitar que se quede abierto y se bloquee la posibilidad de editarlo, tiene una "bomba temporal" que lo cierra a la fuerza a los 60 minutos de abrirlo.

Por otro lado, tengo un "libro B", alojado en el mismo servidor, que también puede ser editado por varias personas y que, en determinado momento, puede querer editar el "libro A", añadiendo información a una de las filas del libro A.

Si el que ha abierto el "libro B" es el que tiene el "libro A" abierto, no hay ningún problema, porque tiene permisos de escritura en el "libro A". Pero si el "libro A" ha sido abierto por un tercero, cuando el "libro B" quiere editarlo, falla su macro, porque no tiene permisos de escritura en el "libro A".

He buscado por Internet cómo averiguar si un libro Excel está abierto o no, para en el caso de que esté abierto, me avise de que no voy a poder completar el trabajo hasta que se cierre. Pero las macros funcionan, y no muy bien, únicamente cuando quien tiene el "libro A" abierto es el mismo que tiene el "libro B" abierto, que es donde está la macro de averiguar si está o no abierto el "libro A".

¿Alguien podría decirme como resolver este asunto?

1 respuesta

Respuesta
1

Prueba la macro "test"

Pon todo el siguiente código en el mismo módulo:

Sub test()
  Dim ruta As String, arch As String
  ruta = "C:\trabajo\"
  arch = "reporte.xlsx"
  '
  'Verifica si el archivo está abierto
  If IsFileOpen(ruta & arch) Then
    MsgBox "Está abierto"
  Else
    MsgBox "Está cerrado"
  End If
End Sub
Function IsFileOpen(strFullPathFileName As String) As Boolean
  '// VBA version to check if File is Open
  '// We can use this for ANY FILE not just Excel!
  '// Ivan F Moala
  '// http://www.xcelfiles.com
  Dim hdlFile As Long
    '// Error is generated if you try
    '// opening a File for ReadWrite lock >> MUST BE OPEN!
    On Error GoTo FileIsOpen:
    hdlFile = FreeFile
    Open strFullPathFileName For Random Access Read Write Lock Read Write As hdlFile
    IsFileOpen = False
    Close hdlFile
    Exit Function
FileIsOpen:
    '// Someone has it open!
    IsFileOpen = True
    Close hdlFile
End Function

¡Gracias!  Muchas gracias, Dante. Funciona perfectamente (al menos conmigo. Mañana probaré con un compañero abriendo él el archivo en otro PC para asegurarme).

La verdad es que es bastante el claro el código y lo entiendo perfectamente.

Me gustaría, si es posible, para aprender, que me digas por qué crees que los códigos que ves en estos dos enlaces no funcionan. Si no, no pasa nada tampoco. Te lo agradezco enormemente.

Enlace 1

Enlace 2

Un saludo,

Kir.

El enlace 1 sí me funciona. Pero esto funciona solamente si está en la misma instancia de excel.

No pusiste el enlace 2.

Perdona, el segundo enlace es este: https://macrosenexcel.com/como-verificar-en-forma-facil-si-un-libro-de-excel-esta-abierto-520/ 

¿Podrías aclararme que significa estar en "la misma instancia"?

Un solo excel. En un excel puedes abrir varios archivos. Entonces estás en la instancia 1.

Pero puedes abrir otro excel, entonces estás en la instancia 2.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas