Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Identificar si archivo esta en uso VBA

| 6 comentarios

Se puede  llegar a determinar si un archivo esta siendo usado a través de la function FileAlreadyOpen. veamos un ejemplo

Function_Archivo en uso

Ejemplo:  Un analista financiero quiere saber si el archivo "creditosbanca.xls" esta siendo usado por otro procesador, para lo cual se emplea la siguiente funcion :

Function FileAlreadyOpen(nomb_archivo As String) As Boolean
' returns True if FullFileName is currently in use by another process
' example:If FileAlreadyOpen("C:\Documentos\creditosbanca.xls") Then

Dim f As Integer
f = FreeFile
On Error Resume Next
Open nomb_archivo For Binary Access Read Write Lock Read Write As #f

Close #f

' If an error occurs, the document is currently open.

If Err.Number <> 0 Then
FileAlreadyOpen = True
'Err.Clear

MsgBox "Error #" & Str(Err.Number) & " - " & Err.Description

Else
FileAlreadyOpen = False

End If

On Error GoTo 0
End Function

Esta nos permite arroja dos resultados : verdadero si el archivo esta siendo usado, y falso si el archivo no esta siendo usado.

También se puede saber si el archivo esta abierto o no , utilizando la siguiente macro. Nos arroja dos posibles mensajes de si el archivo esta abierto o cerrado.
Sub Uso_archivo()
Dim nomb_archivo As String

nomb_archivo = "creditosbanca.xls"

If FileAlreadyOpen(nomb_archivo) Then
MsgBox nomb_archivo & " Abierto", vbOKOnly + vbInformation
Else
MsgBox nomb_archivo & " cerrado", vbOKOnly + vbExclamation
End If
End Sub

6 comentarios

  1. He copiado la rutina pero me arroja un error de "no se ha definido Sub o Funtion", lo que creo que me indica que falta algo por declarar, a menos que esta rutina deba ir aparte y ser llamada por algún comando, por favor: sera posible me indicaran si estoy en lo cierto, gracias. espero respuesta

    • Esta sería la manera correcta de hacer funcionar la macro, saludos!

      Sub Uso_archivo()
      Dim nomb_archivo As String
      nomb_archivo = "WonderLand.xls”"
      If FileAlreadyOpen(nomb_archivo) Then
      MsgBox nomb_archivo & "Abierto", vbOKOnly + vbInformation
      Else
      MsgBox nomb_archivo & "cerrado", vbOKOnly + vbExclamation
      End If
      End Sub
      Function FileAlreadyOpen(nomb_archivo As String) As Boolean
      'returns True if FullFileName is currently in use by another process
      'example:If FileAlreadyOpen(“C:\Documentos\creditosbanca.xls”) Then
      Dim f As Integer
      f = FreeFile
      On Error Resume Next
      Open nomb_archivo For Binary Access Read Write Lock Read Write As #f
      Close #f
      'If an error occurs, the document is currently open.
      If Err.Number 0 Then
      FileAlreadyOpen = True
      ‘Err.Clear
      MsgBox "Error #" & Str(Err.Number) & " – " & Err.Description
      Else
      FileAlreadyOpen = False
      End If
      On Error GoTo 0
      End Function

  2. Buen día
    Creo que no esta bien redactado el articulo, primero va la macro y luego la funcion, osea no se pueden usar de manera independiente

    Segundo, al parecer este codigo solo funciona cuando es otra persona quien tiene abierto el archivo, no si tu mismo lo tienes abierto

    Saludos

    • Estimado Felipe

      Si bien a macro creada requiere de la función, la función y la macro pueden estar en cualquier orden.

      Si funciona cuando uno mismo tiene abierto el archivo, solo hay que señalar la ruta completa, y si no se señala esta ruta se asume que el archivo a evaluar esta en la misma ruta del archivo que tiene la macro.

      Saludos

  3. Felipe tiene razón, tengo una carpeta con los dos archivos de interés, el que tiene el macro y el que se va a abrir, y no lo abre, aún cuando informa err.code=0

  4. muchas gracias, funciona perfecto.

Deja una respuesta

Los campos requeridos estan marcados con *.