Código VBA para saber si un archivo ya está abierto

Si trabaja en equipo, hay ocasiones en las que más de una persona intenta utilizar un archivo. Tal vez su superior inmediato esté verificando una información en un libro de trabajo, mientras que al mismo tiempo intenta cambiar el nombre del archivo. Cuando ejecuta archivos manualmente, normalmente aparece un mensaje de advertencia razonable, pero si intenta hacer esto con una macro, probablemente recibirá este tipo de error:

Archivo VBA abierto Error en tiempo de ejecución '75' Error de acceso a la ruta del archivo

Si otros usuarios van a utilizar su macro, es probable que no tengan idea de lo que significa este error. El siguiente código comprobará si usted u otro usuario ya ha abierto el archivo. Si está abierto o no se puede editar por algún motivo, podrá detener la ejecución de la macro o mostrar un mensaje de error significativo al usuario.

La función tiene 3 resultados posibles:

  • Verdadero = El archivo ya está abierto
  • Falso = El archivo está actualmente cerrado
  • [Número de error] = Algo más salió mal, por lo que se devuelve el número de error.
Función IsFileOpen(fileName As String)Dim fileNum As IntegerDim errNum As Integer'Permitir que ocurran todos los erroresOn Error Resume NextfileNum = FreeFile()'Intente abrir y cerrar el archivo para entrada.'Los errores significan que el archivo ya está abiertoAbrir nombre de archivo para bloqueo de entrada Leer como #fileNumClose fileNum'Obtener el número de errorerrNum = Err'No permitir que ocurran erroresEn error Ir a 0'Verificar el número de errorSeleccionar caso errNum 'errNum = 0 significa que no hay errores, por lo tanto, el archivo se cerró Caso 0 IsFileOpen = False 'errNum = 70 significa el archivo ya está abierto Caso 70 IsFileOpen = True 'Algo más salió mal Caso Else IsFileOpen = errNumEnd Función SelectEnd

Recuerde: las funciones deben colocarse en un módulo para que funcionen correctamente.

El siguiente procedimiento muestra cómo llamar a la función anterior.

Sub CheckIfFileOpen()Dim fileName As StringfileName = "C:UsersmarksDocumentsAlready Open.xlsx"'Llamar a la función para comprobar si el archivo está abiertoIf IsFileOpen(fileName) = False Then 'Insertar acciones que se realizarán en el archivo cerradoDe lo contrario' El archivo está abierto o se produjo otro error. MsgBox fileName "ya está abierto". End IfEnd Sub

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Este sitio web utiliza cookies para mejorar la experiencia del usuario y garantizar un funcionamiento eficiente. Al utilizar nuestro sitio web, aceptas todas las cookies de acuerdo con nuestra política de cookies. Leer mas...