Compartir a través de


Programación de la interfaz de un único documento en Excel

Obtenga información sobre las consideraciones de programación para la interfaz de documento único en Excel.

Comparación de las interfaces de un único documento y de múltiples documentos en Excel 2010 y Excel 2013

Una nueva característica de Excel 2013 es la interfaz de un único documento (SDI). La SDI es un método para organizar las aplicaciones de interfaz gráfica de usuario en ventanas individuales que el administrador de ventanas del sistema operativo controla por separado. En Excel 2013, cada una de las ventanas de Excel puede contener un solo libro y cada una tiene su propia UI de cinta de opciones (vea la figura 1). De forma predeterminada, al abrir un nuevo libro, se mostrará en otra ventana de Excel aunque se trate de la misma instancia de Excel.

Figura 1. Interfaz de un único documento en Excel 2013

Interfaz de un único documento en Excel 2013

Esto contrasta con una interfaz de documento múltiple (MDI), en la que se usa una sola ventana primaria para contener varias ventanas secundarias anidadas, con solo la ventana primaria con una barra de herramientas o menú. En Excel 2010, cada libro de una sola instancia de Excel usa una interfaz de usuario de cinta común (vea la figura 2).

Figura 2. Interfaz de múltiples documentos en Excel 2010

Interfaz de múltiples documentos en Excel 2010

Excel 2010 usa MDI, lo que significa que hay una única ventana de nivel de aplicación que contiene todos los libros que están abiertos en una instancia determinada de Excel. Las ventanas del libro se pueden organizar dentro de la ventana de la aplicación de Excel, y todas comparten la misma interfaz de usuario de la cinta de opciones. SDI en Excel significa que cada libro tendrá su propia ventana de aplicación de nivel superior y tiene su propia interfaz de usuario de cinta correspondiente.

Nota:

No hay ninguna opción de compatibilidad con MDI en Excel.

En los sistemas de dos monitores, la SDI en Excel permite realizar comparaciones en paralelo de dos libros arrastrando cada libro a un monitor diferente. Cada libro funciona independientemente de los demás.

Si tiene acceso a Excel 2010 y Excel 2013 y quiere ver las interfaces SDI y MDI en acción, siga estos pasos.

Para contrastar el número de procesos para las interfaces MDI y SDI

  1. En el menú Inicio de Windows, inicie Excel 2010.
  2. Inicie una segunda aparición de Excel. Compruebe que se muestran las dos ventanas de Excel.
  3. En la barra de tareas de Windows, elija y, a continuación, seleccione Iniciar el Administrador de tareas.
  4. Elija la pestaña Procesos y luego desplácese hacia abajo hasta que vea las dos entradas Excel.exe. Esto le indica que, de forma predeterminada, Excel abre una nueva instancia cada vez que se le llama (dos instancias de Excel).
  5. Cierre las dos instancias de Excel.
  6. En el menú Inicio de Windows, elija Excel 2013.
  7. Inicie una segunda aparición de Excel. Compruebe que se muestran las dos ventanas de Excel.
  8. Vuelva a iniciar el Administrador de tareas.
  9. En la pestaña Procesos , desplácese hacia abajo hasta que vea Excel.exe. Tenga en cuenta que, aunque ha abierto dos repeticiones de Excel, los dos libros están contenidos en la misma instancia única de Excel.

Para ver cómo funcionan la SDI y la MDI dentro de una instancia de Excel, siga estos pasos.

Para comparar el número de instancias de Excel para las interfaces MDI y SDI

  1. En el menú Inicio de Windows, elija Excel 2010.
  2. Seleccione la ventana de Excel para activarla y compruebe que Libro1 es el libro actual.
  3. Presione CTRL + N para abrir otro libro. Compruebe que Libro2 es ahora el libro actual.
  4. Minimice Libro2 y vea Libro1. Ambos libros están incluidos en la misma instancia de Excel.
  5. Cierre Excel.
  6. En el menú Inicio de Windows, elija Excel 2013.
  7. Seleccione la ventana de Excel para activarla y compruebe que Libro1 es el libro actual.
  8. Presione CTRL + N para abrir otro libro. Compruebe si Libro2 se abre en una ventana distinta (pero en la misma instancia de Excel).
  9. Cierre Excel.

Nota:

Puede abrir varias instancias de Excel mediante el siguiente modificador de línea de comandos: excel.exe /x. Este modificador inicia Excel en un nuevo proceso.

En este artículo, trataremos la implementación de la SDI en la interfaz de usuario de Excel y cómo afecta a la programación en Excel.

Qué ha cambiado en la interfaz de usuario

Si observa detenidamente después de abrir un libro de Excel, ya no verá los botones de estado de ventana ( minimizar, maximizar y restaurar) en la esquina superior derecha de la cinta de opciones. En la figura 3 se muestran los botones de estado de ventana que están disponibles en Excel y Excel 2007. Puesto que la ventana de nivel superior ahora está vinculada directamente a un único libro o vista de libro, ya no es necesaria para la interfaz de usuario de administración de ventanas en Excel.

Figura 3. UI de estado de ventanas en Excel 2010

UI de estado de ventanas en Excel 2010

Además, a partir de Excel, ya no hay varias ventanas de libro dentro de una sola ventana de instancia de Excel, como se muestra en la figura 4.

Figura 4. Varios libros en una sola ventana de instancia de Excel

Varios libros en una sola instancia de Excel

Actualización y fórmulas

Los recálculos en Excel seguirán siendo "globales", lo que significa que se producen en libros de la misma instancia de Excel. Las fórmulas que hacen referencia a los libros que están abiertos en la misma instancia de Excel participarán en los cálculos juntos y compartirán el mismo modo de cálculo del libro (automático, automático excepto para tablas de datos y manual).

En MDI, solo hay una barra de fórmulas para controlar todos los libros abiertos en esa instancia de Excel. En SDI, hay una barra de fórmulas por cada libro. Para SDI, al editar referencias a través libros en una fórmula, las barras de fórmula de los libros de origen y de destino mostrarán la fórmula que se está editando actualmente como se muestra en la figura 5.

Figura 5. Actualización de fórmulas entre libros

Actualización de fórmulas entre libros

Paneles de tareas personalizados

Los paneles de tareas personalizados que se adjuntan a una ventana de nivel superior en MDI ahora se adjuntan a la ventana de un libro determinado en SDI. Al cambiar a otro libro, se activará esa ventana del libro, que no tendrá necesariamente el panel de tareas personalizado adjunto, a menos que el código del desarrollador se actualice para mostrar específicamente el panel de tareas personalizado para ese libro.

Para resumir, como desarrollador, querrá:

  • Asegúrese de que, para los libros en los que quiera mostrar el panel de tareas personalizado, escriba código para hacerlo explícitamente.
  • Asegurarse de que controla de forma explícita la actualización del estado del panel de tareas personalizado en todas las instancias, si desea que todos los paneles de tareas personalizados reflejen el mismo estado. Por ejemplo, el usuario activa una casilla de verificación y desea que esa acción se refleje en todos los paneles de tareas personalizados en todas las instancias de Excel.

Cintas de opciones personalizadas

Ahora, las pestañas y controles personalizados de la cinta de opciones que asumieron una única interfaz de usuario de cinta por instancia de aplicación en versiones anteriores de Excel se propagarán a cada cinta de libros de Excel. Mientras que en MDI, el desarrollador de la cinta de opciones personalizada no tenía que tener en cuenta varias instancias de sus controles en diferentes instancias de la interfaz de usuario de la cinta de opciones de Excel, con SDI tendrán que tener en cuenta esta situación.

Si quiere mantener todos los controles de interfaz de usuario de la cinta de opciones en el mismo estado en los libros abiertos, deberá:

  • Asegurarse de que el código es capaz de desplazarse por las ventanas de los libros y actualizar el estado de los controles.

O

  • Almacenar en caché el estado de los controles de forma que, cuando el usuario cambia a otro libro, se pueda capturar ese evento y se actualicen los controles como parte del modificador de ventana.

Además, tenga en cuenta el caso en el que desarrolla código para agregar un control de interfaz de usuario personalizado mediante Application.Commandbar para acceder a la cinta de opciones. Cuando intenta tener acceso a ese control en un momento posterior, el código deberá tener en cuenta el hecho de que el libro activo puede no ser el mismo libro donde agregó el control.

Consideraciones para el código VBA

Con el desplazamiento a SDI, todos los métodos, eventos y propiedades de la ventana de nivel de aplicación de Excel no se ven afectados y funcionan de la manera que tienen en versiones anteriores de Excel (por ejemplo, Application.ActiveWindow, , Application.Windowsetc.).

En Excel, todos los métodos, eventos y propiedades de la ventana de nivel de libro funcionan ahora en la ventana de nivel superior (por ejemplo, el Workbook.WindowActivate evento se sigue desencadenando cuando se cambia a un libro determinado, el Workbook.Resize evento se sigue desencadenando cuando se cambia el tamaño del libro, y ThisWorkbook.Windows(1).Height, ThisWorkbook.Windows(1).Width, ThisWorkbook.Windows(1).Left, ThisWorkbook.Windows(1).Right, , ThisWorkbook.Windows(1).Minimize, etc ThisWorkbook.Windows(1).Maximize . funcionará en la ventana de nivel superior del libro activo).

En la siguiente tabla se enumeran algunos casos especiales.

Tabla 1. Comportamiento del modelo de objetos con la SDI

Función Descripción Implicaciones de SDI
Application.Visible Devuelve o establece un valor Boolean que determina si el objeto es visible. Lectura y escritura. Si todas las ventanas están ocultas:
  • Application.Visible se convierte en False

  • Al establecer Application.Visible en True, se muestran todas las ventanas ocultas.

  • Abrir un documento mediante el shell solo muestra esa ventana y Application.Visible es ahora True.

Además:
  • Application.Visible = False oculta todo y Application.Visible = True muestra todo, ignorando cualquier configuración a nivel de documento

  • Si todas las ventanas están ocultas por la configuración del nivel de la ventana, entonces, la configuración de nivel de la aplicación también alterna.

  • Tener al menos una ventana a la vista significa que la configuración del nivel de la aplicación es True.

Application.ShowWindowsInTaskbar True si hay un botón de barra de tareas de Windows independiente para cada libro abierto. El valor predeterminado es True. Boolean de lectura y escritura. Esta configuración está en desuso en Excel.
Application.Caption Devuelve o establece un valor String que representa el nombre que aparece en la barra de título de la ventana principal de Microsoft Excel. Actualiza todas las ventanas para esa instancia de Excel.
Application.Hwnd Devuelve un valor Long que indica el identificador de ventana superior de la ventana de Microsoft Excel. Solo lectura. Devolverá el identificador de la ventana activa.
Application.FormulaBarHeight Permite al usuario especificar la altura de la barra de fórmulas en líneas. Long de lectura y escritura. Funciona en la ventana del libro activo actualmente; no todas las ventanas para esta instancia de Excel.
Application.DisplayFormulaBar True si está visible la barra de fórmulas. Boolean de lectura y escritura. Funciona en todas las ventanas para esta instancia de Excel.
Workbook.Windows Devuelve una colección de ventanas que representa todas las ventanas del libro especificado. Object de ventanas de solo lectura. Ningún cambio de comportamiento. Devuelve la colección de ventanas de este libro como paneles de tareas, vistas adicionales.
Workbook.WindowResize Se produce cuando se cambia el tamaño de cualquier ventana del libro. Ningún cambio de comportamiento. Se desencadena cuando se cambia el tamaño de la ventana de un libro (el nivel superior).
Window.Caption Devuelve o establece un valor Variant que representa el nombre que aparece en la barra de título de la ventana principal del documento. Ningún cambio de comportamiento.
Workbook.Protect(Password, Structure, Windows) Protege un libro para que no se pueda modificar. Independientemente del valor del parámetro Windows (True o False), NO se habilitará la protección de la estructura de la ventana. No se muestra ningún error en tiempo de ejecución si se especifica True, pero esa parte de la llamada de procedimiento devolverá un NO-OP.

Nota:

No se requiere ningún cambio en el código personalizado para que los comandos XLM sigan funcionando según lo previsto en Excel con SDI.

Desuso de la opción Ventanas de Proteger libro

En SDI, cada libro tiene su propia ventana de nivel superior que se puede restaurar, minimizar y cerrar. Para minimizar cualquier confusión que pueda encontrar al no estar a punto de mover, cambiar el tamaño o cerrar esta ventana de nivel superior, la opción Windows de la característica Proteger libro en Excel ya no está disponible (vea la figura 6). La tabla 2 describe esta acción con más detalle.

Figura 6. La opción Ventanas del cuadro de diálogo Proteger libro está deshabilitada.

Opción Ventanas del cuadro de diálogo Proteger libro

Action Comportamiento
Abrir un libro creado en una versión anterior de Excel, con la protección de ventanas habilitada. Excel reconocerá la ubicación de la ventana y los atributos de tamaño, pero no impedirá que el usuario arregle o cierre estas ventanas.
Ver el cuadro de diálogo Proteger estructuras y ventanas. Excel mostrará el cuadro de diálogo, pero con la opción Windows deshabilitada.

Soluciones para problemas de la SDI

La siguiente sección proporciona soluciones para problemas que puede encontrar al usar la SDI.

  • No se puede cerrar un libro haciendo clic en el botón rojo "X" Cerrar cuando ese libro se abre mediante programación a través de un formulario de usuario modal. Para solucionar este problema, se recomienda que agregue el siguiente código al procedimiento del evento Layout del formulario de usuario y, a continuación, abra el formulario de usuario como no modal.

      Private Sub UserForm_Layout()
          Static fSetModal As Boolean
          If fSetModal = False Then
              fSetModal = True
              Me.Hide
              Me.Show 1
          End If
      End Sub
    

    Otra opción es abrir la ventana del libro, activar cualquier otra ventana y, a continuación, volver a activar la ventana del libro. Ahora debería poder cerrar el libro usando el botón Cerrar.

  • Supongamos que el código VBA abre varios libros y usa la propiedad DataEntryMode para controlar la entrada de datos y el cierre del libro. En el modelo SDI de Excel, dado que cada libro está contenido en su propio proceso, la propiedad DataEntryMode usada en un libro no reconoce la existencia de otro libro y, por lo tanto, tiene poco o ningún efecto en su interacción. Para solucionar este problema, hay un par de opciones. Puede ocultar los libros o hojas de cálculo adicionales mediante Window.Visible = False o Sheet.Visible = False, respectivamente. Detecte y cancele los eventos de cierre mediante Workbook.BeforeClose(Cancel) = True.

  • Las barras de herramientas agregadas a los libros de Excel a través del código de barra de comandos y los archivos XLA no se mostrarán hasta que cierre y vuelva a abrir el libro. Las barras de comandos para personalizar la interfaz de usuario quedaron en desuso a partir de Excel 2007. La solución óptima es personalizar la interfaz de usuario de la cinta de opciones con archivos XML tal como se describe en detalle en el artículo Customizing the 2007 Office Fluent Ribbon for Developers.

    Otra opción consiste en usar un evento de nivel de aplicación para detectar la apertura de nuevos libros y, a continuación, usar Application.Windows en lugar de libros para agregar el control de cinta de opciones. Puede utilizar el siguiente código de ejemplo para conseguirlo.

      Private Sub Workbook_Open()
          ToolBarsAdd
      End Sub
    
      Sub ToolBarsAdd()
          Dim oBar As CommandBar
    
          ToolBarsDelete
          Set oBar = Application.CommandBars.Add(Name:="MyToolBar")
          '
          With oBar
              With .Controls.Add(Type:=msoControlButton)
                  .OnAction = "SayHello"
                  .FaceId = 800
              End With
          End With
          oBar.Visible = True
      End Sub
    
      Sub SayHello()
          MsgBox "Hello from '" & ActiveWorkbook.Name & "'"
      End Sub
    

    El siguiente código se podría usar a continuación para quitar la barra de herramientas antes de cerrar el libro.

      Private Sub Workbook_BeforeClose(Cancel As Boolean)
          ToolBarsDelete
      End Sub
    
      Sub ToolBarsDelete()
      Dim wnd As Window
      On Error Resume Next
          For Each wnd In Application.Windows
              wnd.Activate
              Application.CommandBars("MyToolBar ").Delete
          Next wnd
      End Sub
    
  • En Excel 2010, un formulario de usuario modeless se muestra como la ventana de nivel superior sobre todas las ventanas de Excel de forma predeterminada. En Excel 2013, un formulario de usuario sin modo solo es visible encima de la ventana del libro que estaba activo cuando se mostró el formulario de usuario. Excel Most Valuable Professional (MVP) Jan Karel Pieterse proporciona una explicación del problema y una solución en su página web en https://www.jkp-ads.com/articles/keepuserformontop.asp.

Resumen

Con la nueva interfaz de un único documento de Excel 2013, es más fácil trabajar con varios libros. Incluso puede arrastrar los libros a diferentes monitores para mayor comodidad. Únicamente tiene que recordar que hay una sola ventana de nivel superior y un solo menú de UI de cinta de opciones por cada libro. Esto puede requerir actualizar el código existente para almacenar en caché el estado de los controles y la configuración al cambiar de un libro a otro.

Consulte también

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.