Una macro de excel para determinar si un libro está abierto

Video: Convertir cada Hoja de EXCEL en un Archivo independiente - Macro

Al pensar en la apertura de los libros de Excel de forma automática, tenga en cuenta lo que puede ocurrir si se intenta abrir un libro que ya está abierto. En el mundo no-VBA, Excel intenta abrir el archivo de nuevo, con el mensaje de advertencia que muestran los cambios no guardados se perderán. Puede proteger contra tal ocurrencia comprobando si un determinado archivo ya está abierto antes de intentar abrirlo de nuevo.

Evitar este mensaje de advertencia.
Evitar este mensaje de advertencia.

Video: Ejecutar macro al abrir libro excel

Cómo funciona la macro

La primera cosa a notar acerca de esta macro es que es una función, no un procedimiento Sub. Como se verá, haciendo de esta una función macro le permite pasar a cualquier nombre de archivo para comprobar si ese archivo ya está abierto.

Video: Excel 2007 Macro en VBA para ejecutar una misma macro en todos los libros abiertos.mp4

La esencia de este código es simple. Que está probando un nombre de archivo dado para ver si se puede asignar a una variable de objeto. Sólo libros abiertos se pueden asignar a una variable de objeto. Cuando intenta asignar un libro cerrado a la variable, se produce un error.

Si el libro dado puede ser asignado, el libro está abierto, si se produce un error, se cierra el libro.

Función FileIsOpenTest (TargetWorkbook como secuencia) como Boolean`Step 1: Declarar su variablesDim TestBook Como Workbook`Step 2: Dile a Excel para reanudar el errorOn Error Resume Next`Step 3: Trate de asignar el libro de destino a TestBookSet TESTBOOK = libros (TargetWorkbook) `Paso 4: Si se ha producido ningún error, libro de trabajo es ya openIf Err.Number = 0 ThenFileIsOpenTest = TrueElseFileIsOpenTest = FalseEnd IfEnd Función

Lo primero que hace es la macro para declarar una variable de cadena que contendrá el nombre de archivo que el usuario elija. TestBook es el nombre de la variable de cadena.

En el Paso 2, le dice a Excel que puede haber un error al ejecutar este código y, en el caso de un error, reanudar el código. Sin esta línea, el código simplemente se detendrá cuando se produce un error. Una vez más, se prueba un nombre de archivo dado para ver si se puede asignar a una variable de objeto. Si el libro dado puede ser asignado, que es abierto si se produce un error, es cerrado.

En el paso 3, se intenta asignar el libro dado a la variable de objeto TestBook. El libro intenta asignar una variable de cadena llamado TargetWorkbook. TargetWorkbook se pasa a la función en las declaraciones de función (ver la primera línea del código). Esta estructura elimina la necesidad de codificar un nombre del libro, que le permite pasar como una variable en su lugar.

En el paso 4, sólo tiene que comprobar para ver si se ha producido un error. Si no se produce un error, el libro está abierto, por lo que establece la FileIsOpenTest en True. Si se produce un error, el libro no está abierto y se ajusta el FileIsOpenTest en Falso.

Una vez más, esta función se puede utilizar para evaluar cualquier archivo se pasa a ella, a través de su argumento TargetWorkbook. Esta es la belleza de poner la macro en una función.

La macro siguiente muestra cómo implementar esta función. A continuación, se llama a la nueva función FileIsOpenTest para asegurarse de que el usuario no puede abrir un archivo ya abierto:

Sub Macro1 ()
`Paso 1: Definir una variable String
Dim FName como variante
Dim como secuencia FNFileOnly
`Paso 2: cuadro de diálogo GetOpenFilename Método activa
FName = Application.GetOpenFilename (_
FileFilter: ="Libros de Excel, *. * Xl", _
Título: ="Elegir un libro para abrir", _
SelecciónMúltiple: = false)
`Paso 3: Abrir el archivo elegido si no está ya abierto
Si FName lt; gt; Entonces falsa
FNFileOnly = StrReverse (Izquierda (StrReverse (FName), _
InStr (StrReverse (FName), ") - 1))
Artículos Relacionados