Se puede llegar a determinar si un archivo esta siendo usado a través de la function FileAlreadyOpen. veamos un ejemplo
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
29/05/2015 a las 12:35 pm
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
02/11/2016 a las 1:08 pm
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
02/11/2016 a las 1:07 pm
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
11/11/2016 a las 3:38 pm
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
06/02/2017 a las 4:23 pm
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
14/04/2022 a las 4:25 pm
muchas gracias, funciona perfecto.