Una macro de Excel para determinar si un libro está abierto
Al pensar en abrir automáticamente los libros de Excel, 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 muestran advirtiendo que se perderán los cambios no guardados. Usted puede proteger contra tal ocurrencia comprobando si un determinado archivo ya está abierto antes de tratar de abrirlo de nuevo.
Cómo funciona el macro
La primera cosa a notar acerca de esta macro es que es una función, no un procedimiento Sub. Como verá, haciendo de esta una función macro le permite pasar cualquier nombre de archivo a la misma para comprobar si ese archivo ya está abierto.
La esencia de este código es simple. Usted 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 determinado puede ser asignado, el libro es abierto si se produce un error, se cierra el libro.
FileIsOpenTest Función (TargetWorkbook como secuencia) como Boolean'Step 1: Declare 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 ya está openIf Err.Number = 0 ThenFileIsOpenTest = TrueElseFileIsOpenTest = FalseEnd IfEnd Función
Lo primero que la macro hace es declarar una variable de cadena que contendrá el nombre de archivo que el usuario elija. TestBook es el nombre de la variable String.
En el Paso 2, le dices a Excel que puede haber un error de ejecutar este código y, en caso de un error, reanudar el código. Sin esta línea, el código simplemente detenerse 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 se le puede asignar, 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 String llamado TargetWorkbook. TargetWorkbook se pasa a la función de las declaraciones de función (ver la primera línea del código). Esta estructura elimina la necesidad de codificar un nombre del libro, lo que le permite pasar como una variable en 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 True. Si se produce un error, el libro no está abierto y se ajusta el FileIsOpenTest False.
Una vez más, esta función puede utilizarse para evaluar cualquier archivo se pasa a la misma, 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. En este caso, 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 cadena variableDim FName Como VariantDim FNFileOnly Como String'Step 2: Método GetOpenFilename activa de diálogo boxFName = Application.GetOpenFilename (_FileFilter: = "libros de Excel, * xl *.", _Title: = "Elija un libro para abrir ", _MultiSelect: = False) 'Paso 3: Abra el archivo seleccionado si no está ya openedIf FName lt;> Falso ThenFNFileOnly = StrReverse (Izquierda (StrReverse (FName), _InStr (StrReverse (FName), "") - 1)) Si FileIsOpenTest (FNFileOnly) = true ThenMsgBox "El archivo dado ya está abierto" ElseWorkbooks.Open Nombre : = FNameEnd IfEnd IfEnd Sub
Con esta macro implementa, se obtiene el cuadro de mensaje se muestra más amable.
Cómo utilizar la macro
Para implementar esta macro, puede copiar y pegar las dos piezas de código en un módulo estándar:
Activar el Editor de Visual Basic presionando Alt + F11.
derecha, haga clic en el nombre del proyecto / libro en la ventana del proyecto.
Seleccione Insertar-Module.
Escriba o pegue el código en el módulo recién creado.
(Opcional) Asigne la macro a un botón.