Una macro de Excel para determinar si un libro de trabajo está abierto

  1. Software
  2. Oficina de Microsoft
  3. Excel
  4. Una macro de Excel para determinar si un libro de trabajo está abierto

Libro Relacionado

Macros de Excel para tontos

Por Michael Alexander

Cuando piense en abrir automáticamente los libros de trabajo de Excel, tenga en cuenta lo que puede suceder si intenta abrir un libro que ya está abierto. En el mundo no-VBA, Excel intenta abrir el archivo de nuevo, con el mensaje que se muestra advirtiendo que cualquier cambio no guardado se perderá. Puede protegerse contra tal ocurrencia comprobando si un archivo dado ya está abierto antes de intentar abrirlo de nuevo.

Evite este mensaje de advertencia.

Cómo funciona la macro

Lo primero que hay que notar sobre esta macro es que es una función, no un procedimiento Sub. Como verá, hacer de esta macro una función le permite pasarle cualquier nombre de archivo para comprobar si ese archivo ya está abierto.

La esencia de este código es simple. Está probando un nombre de archivo determinado para ver si se puede asignar a una variable Object. Sólo los libros de trabajo abiertos pueden asignarse a una variable Objeto. Cuando se intenta asignar un libro de trabajo cerrado a la variable, se produce un error.

Si se puede asignar el libro de trabajo dado, el libro de trabajo está abierto; si se produce un error, se cierra el libro de trabajo.

Función FileIsOpenTest(TargetWorkbook As String) As Boolean'Paso 1: Declare sus variables Dim TestBook As Workbook'Paso 2: Diga a Excel que se reanude en caso de error On Error Resume Next'Paso 3: Intente asignar el libro de trabajo de destino a TestBook Set TestBook = Cuadernos de trabajo(TargetWorkbook)'Paso 4: Si no se ha producido ningún error, el libro de trabajo ya está abierto Si el número de error = 0 FileIsOpenTest = FileIsOpenTest = Verdadero FileIsOpenTest = Falso Fin Si la función IfEnd

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

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

En el Paso 3, usted intenta asignar el libro de trabajo dado a la variable Objeto de TestBook. El libro de trabajo que intenta asignar es una variable String llamada TargetWorkbook. TargetWorkbook se pasa a la función en las declaraciones de función (véase la primera línea del código). Esta estructura elimina la necesidad de codificar el nombre de un libro de trabajo, permitiéndole que lo pase como una variable en su lugar.

En el paso 4, simplemente compruebe si se ha producido un error. Si no se ha producido ningún error, el libro de trabajo está abierto, por lo que ha establecido FileIsOpenTest como True. Si se produce un error, el libro de trabajo no está abierto y se establece FileIsOpenTest en False.

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

La siguiente macro muestra cómo implementar esta función. Aquí, usted llama a la nueva función FileIsOpenTest para asegurarse de que el usuario no pueda abrir un archivo ya abierto:

Sub Macro1()'Paso 1: Definir una variable de cadenaDim FName As VariantDim FNFileOnly As String'Paso 2: El método GetOpenFilename activa la caja de diálogoFName = Application.GetOpenFilename( _FileFilter:="Cuadernos de Trabajo Excel,*.

x

l*", _Title:="Choose a Workbook to Open", _MultiSelect:=False)'Paso 3: Abrir el archivo elegido si aún no está abiertoSi FName <> False ThenFNFileOnly = StrReverse(Left(StrReverse(FName), _InStr(StrReverse(FName), ") - 1))

Leave a Reply

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