Compartilhar via


Programando para a Interface de Documento Único do Excel

Saiba mais sobre considerações de programação para a Interface de Documento Único no Excel.

Comparando interfaces de um documento ou de vários documentos no Excel 2010 e no Excel 2013

Um novo recurso do Excel 2013 é a interface de documento único (SDI). A SDI é um método de organização de aplicativos da interface gráfica do usuário (IU) em janelas individuais que o gerenciador de janelas do sistema operacional manipula separadamente. No Excel 2013, cada janela do Excel pode conter apenas uma pasta de trabalho, e cada uma delas tem sua própria IU da faixa de opções (veja a Figura 1). Por padrão, quando você abrir uma nova pasta de trabalho, ela será exibida em outra janela do Excel, ainda que seja a mesma instância do Excel.

Figura 1. Interface de Documento Único no Excel 2013

Single Document Interface in Excel 2013

Ela é diferente da interface de vários documentos (MDI), em que uma única janela pai é usada para conter várias janelas filhas aninhadas, e apenas a janela pai tem uma barra de menus ou de ferramentas. No Excel 2010, cada pasta de trabalho em uma única instância do Excel utiliza uma IU de faixa de opções comum (veja a Figura 2).

Figura 2. Interface de Vários Documentos no Excel 2010

Multiple Document Interface in Excel 2010

O Excel 2010 usa o MDI, o que significa que há uma única janela no nível do aplicativo que contém todas as pastas de trabalho abertas em uma instância específica do Excel. As janelas da pasta de trabalho podem ser organizadas dentro da janela de aplicativo do Excel, todas compartilhando a mesma IU da Faixa de Opções. O SDI no Excel significa que cada pasta de trabalho terá sua própria janela de aplicativo de nível superior e tem sua própria interface do usuário de faixa de opções correspondente.

Observação

Não há nenhuma opção de compatibilidade MDI no Excel.

Em sistemas com dois monitores, a SDI no Excel permite comparações lado a lado de duas pastas de trabalho arrastando cada pasta de trabalho para um monitor diferente. Cada pasta de trabalho trabalha de forma independente da outra.

Para ver a SDI e a MDI em ação, se você tiver o Excel 2010 e o Excel 2013 disponíveis, execute as etapas a seguir.

Para contrastar o número de processos para interfaces MDI e SDI

  1. No menu Iniciar do Windows, inicie o Excel 2010.
  2. Inicie uma segunda ocorrência do Excel. Verifique se as duas janelas do Excel estão sendo exibidas.
  3. Na Barra de Tarefas do Windows, escolha e então selecione Iniciar o Gerenciador de Tarefas.
  4. Escolha a guia Processos e role para baixo até ver as duas entradas Excel.exe. Isso informa que, por padrão, o Excel abre uma nova instância sempre que é chamada (duas instâncias do Excel).
  5. Feche as duas instâncias do Excel.
  6. No menu Iniciar do Windows, escolha o Excel 2013.
  7. Inicie uma segunda ocorrência do Excel. Verifique se as duas janelas do Excel estão sendo exibidas.
  8. Inicie o Gerenciador de Tarefas novamente.
  9. Na guia Processos , role para baixo até ver Excel.exe. Lembre-se de que, embora você tenha aberto duas ocorrências do Excel, as duas pastas de trabalho estão contidas na mesma instância única do Excel.

Para ver o funcionamento da SDI e da MDI em uma instância do Excel, execute as etapas a seguir.

Para comparar o número de instâncias do Excel para interfaces MDI e SDI

  1. No menu Iniciar do Windows, escolha o Excel 2010.
  2. Escolha a janela do Excel para torná-la ativa e verifique se a Pasta1 é a pasta de trabalho atual.
  3. Pressione CTRL + N para abrir outra pasta de trabalho. Verifique se a Pasta2 é a pasta de trabalho atual.
  4. Minimize a Pasta2 e veja a Pasta1. Ambas as pastas de trabalho estão contidas na mesma instância do Excel.
  5. Feche o Excel.
  6. No menu Iniciar do Windows, escolha o Excel 2013.
  7. Escolha a janela do Excel para torná-la ativa e verifique se a Pasta1 é a pasta de trabalho atual.
  8. Pressione CTRL + N para abrir outra pasta de trabalho. Verifique se a Pasta2 está aberta em uma janela separada (mas na mesma instância do Excel).
  9. Feche o Excel.

Observação

Você pode abrir várias instâncias do Excel usando o seguinte comutador de linha de comando: excel.exe /x. Essa opção inicia o Excel em um novo processo.

Neste artigo, discutiremos a implementação da SDI na IU do Excel e como ela afeta a programação no Excel.

O que foi alterado na Interface do Usuário

Se você olhar atentamente depois de abrir uma pasta de trabalho do Excel, não verá mais os botões de estado da janela ( minimizar, maximizar e restaurar) no canto superior direito da faixa de opções. A Figura 3 mostra os botões de estado da janela que estão disponíveis no Excel e no Excel 2007. Como a janela principal agora está diretamente ligada a uma exibição de pasta de trabalho única ou de pasta de trabalho, não há mais a necessidade da IU de gerenciamento de janelas no Excel.

Figura 3. IU de estado de janelas no Excel 2010

Windows state UI in Excel 2010

Além disso, a partir do Excel, não há mais várias janelas de pasta de trabalho dentro de uma única janela de instância do Excel, como visto na Figura 4.

Figura 4. Várias pastas de trabalho em uma janela de única instância do Excel

Multiple workbooks in a single Excel instance

Recálculo e fórmulas

Os recálculos no Excel ainda serão "globais", o que significa que ocorrem entre pastas de trabalho na mesma instância do Excel. Fórmulas que fazem referência entre pastas de trabalho que estão abertas na mesma instância do Excel participarão de cálculos em conjunto e compartilharão o mesmo modo de cálculo de pasta de trabalho (automático, automático, exceto para tabelas de dados e manual).

Na MDI, há somente uma barra de fórmulas para manipular todas as pastas de trabalho abertas naquela instância do Excel. Na SDI, há uma barra de fórmulas por pasta de trabalho. Para a SDI, durante a edição de referências entre planilhas em uma fórmula, as barras de fórmulas de pasta de trabalho de origem e de destino mostrará a fórmula que estiver sendo editada no momento, como mostrado na Figura 5.

Figura 5. Atualizando fórmulas entre pastas de trabalho

Updating cross-workbook formulas

Painéis de Tarefas Personalizados

Os painéis de tarefas personalizados anexados a uma janela de nível superior no MDI agora estão anexados à janela de uma pasta de trabalho específica no SDI. Alternar para uma pasta de trabalho diferente ativará essa janela de pasta de trabalho, que não necessariamente terá o painel de tarefas personalizado anexado, a menos que o código do desenvolvedor seja atualizado para exibir especificamente o painel de tarefas personalizado para essa pasta de trabalho.

Para resumir, como desenvolvedor, você deseja:

  • Verifique se para quaisquer pastas de trabalho em que você deseja mostrar o painel de tarefas personalizado, você grava código para fazer isso explicitamente.
  • Manipular explicitamente a atualização do estado do painel de tarefas personalizado em todas as instâncias se quiser que todos os painéis de tarefas personalizados reflitam o mesmo estado. Por exemplo, uma caixa de seleção é alternada para Ativado pelo usuário e você deseja que isso seja refletido em todos os outros painéis de tarefas personalizados em todas as instâncias do Excel.

Faixas de opções personalizadas

Guias e controles de faixa de opções personalizados que assumiram uma única interface do usuário por instância de aplicativo em versões anteriores do Excel agora serão propagados em cada faixa de opções de pasta de trabalho no Excel. Considerando que no MDI o desenvolvedor de faixa de opções personalizada não precisava considerar várias instâncias de seus controles em instâncias diferentes da interface do usuário de faixa de opções do Excel, com o SDI, eles precisarão responder por essa situação.

Se você quiser manter todos os controles de interface do usuário da faixa de opções no mesmo estado em pastas de trabalho abertas, você precisará:

  • Garantir que o código consiga percorrer as janelas de pasta de trabalho e atualizar o estado dos controles.

OU

  • Armazenar em cache o estado dos controles de forma que quando o usuário alterne para outra pasta de trabalho, esse evento possa ser capturado e os controles atualizados como parte da alternância de janela.

Além disso, considere o caso em que você desenvolve código para adicionar um controle de interface do usuário personalizado usando Application.Commandbar para acessar a faixa de opções. Quando você tentar acessar esse controle posteriormente, seu código precisará responder pelo fato de que a pasta de trabalho ativa poderá não ser a mesma pasta de trabalho à qual você adicionou o controle.

Considerações sobre o código VBA

Com a mudança para sDI, todos os métodos, eventos e propriedades de janela no nível do aplicativo do Excel permanecem não afetados e funcionam da maneira que têm em versões anteriores do Excel (por exemplo, Application.ActiveWindow, e Application.Windowsassim por diante).

No Excel, todos os métodos, eventos e propriedades de janela no nível da pasta de trabalho agora operam na janela de nível superior (por exemplo, o Workbook.WindowActivate evento ainda é disparado quando você alterna para uma pasta de trabalho específica, o Workbook.Resize evento ainda é disparado quando essa pasta de trabalho é redimensionada e ThisWorkbook.Windows(1).Height, ThisWorkbook.Windows(1).Width, ThisWorkbook.Windows(1).Left, ThisWorkbook.Windows(1).Right, ThisWorkbook.Windows(1).Minimizee ThisWorkbook.Windows(1).Maximize assim por diante funcionará na janela de nível superior para a pasta de trabalho ativa).

Os casos especiais estão listados na tabela a seguir.

Tabela 1. Comportamento do Modelo de Objeto com a SDI

Função Descrição Implicações da SDI
Application.Visible Retorna ou define um valor Boolean que determina se o objeto será visível. Leitura/gravação. Se todas as janelas estiverem ocultas:
  • Application.Visible se torna False

  • A configuração de Application.Visible como True exibirá todas as janelas ocultas

  • A abertura de um documento por meio do shell só mostrará essa janela e Application.Visible agora será True

Além disso:
  • Application.Visible = False oculta tudo e Application.Visible = True exibe tudo, ignorando todas as configurações no nível de documento

  • Se todas as janelas tiverem sido ocultadas por meio da configuração no nível de janela, a configuração no nível de aplicativo também será alternada

  • Ter pelo menos uma janela exibida significa que a configuração no nível de aplicativo é True

Application.ShowWindowsInTaskbar True se houver um botão separado da barra de tarefas do Windows para cada pasta de trabalho aberta. O valor padrão é True. Boolean de leitura/gravação. Essa configuração é preterida no Excel.
Application.Caption Retorna ou define um valor String que representa o nome exibido na barra de título da janela principal do Microsoft Excel. Atualiza todas as janelas daquela instância do Excel.
Application.Hwnd Retorna um Long indicando o identificador da janela principal da janela do Microsoft Excel. Somente leitura. Retornará o identificador da janela ativa.
Application.FormulaBarHeight Permite que o usuário especifique a altura da barra de fórmulas em linhas. Long de leitura/gravação. Funciona na janela da pasta de trabalho ativa atualmente; nem todas as janelas para esta instância do Excel.
Application.DisplayFormulaBar True se a barra de fórmulas estiver visível. Boolean de leitura/gravação. Funciona em todas as janelas desta instância do Excel.
Workbook.Windows Retorna uma coleção Windows, que representa todas as janelas da pasta de trabalho especificada. Object do Windows somente leitura. Nenhuma alteração no comportamento. Retorna a coleção de janelas para esta pasta, como painéis de tarefas e exibições adicionais.
Workbook.WindowResize Ocorre quando qualquer janela de pasta de trabalho é redimensionada. Nenhuma alteração no comportamento. É disparado quando uma janela de pasta de trabalho (o nível superior) é redimensionada.
Window.Caption Retorna ou define um valor Variant, que representa o nome que aparece na barra de título da janela do documento. Nenhuma alteração no comportamento.
Workbook.Protect(Password, Structure, Windows) Protege uma pasta de trabalho de forma que ela não possa ser modificada. Independentemente do valor do parâmetro Windows (True ou False), a proteção de estrutura de janela NÃO será habilitada. Nenhum erro de tempo de execução será exibido caso True seja especificado, mas essa parte da chamada ao procedimento retornará um NO-OP.

Observação

Não há alterações necessárias no código personalizado para que os comandos XLM continuem a funcionar como esperado na SDI do Excel.

Preterindo a opção Janelas de Proteger Pasta de Trabalho

Na SDI, cada pasta de trabalho tem sua própria janela principal que você pode restaurar, minimizar e fechar. Para minimizar qualquer confusão que você possa encontrar ao não estar prestes a mover, redimensionar ou fechar essa janela de nível superior, a opção Windows no recurso Proteger Pasta de Trabalho no Excel não está mais disponível (consulte Figura 6). A Tabela 2 descreve essa ação em mais detalhes.

Figura 6. A opção Janelas da caixa de diálogo Proteger Pasta de Trabalho está desabilitada

Windows option of the Protect Workbook dialog

Action Comportamento
Abrir uma pasta de trabalho criada em uma versão anterior do Excel, com a Proteção de Janela habilitada O Excel reconhecerá os atributos de localização e tamanho da janela, mas não impedirá que o usuário organize ou feche essas janelas.
Exibir a caixa de diálogo Proteger Estrutura e Janelas O Excel exibirá a caixa de diálogo, mas com a opção Windows desabilitada.

Soluções para problemas de SDI

A seção a seguir oferece soluções alternativas para problemas que você poderá encontrar ao usar a SDI.

  • Uma pasta de trabalho não pode ser fechada clicando no botão vermelho "X" Fechar quando essa pasta de trabalho é aberta programaticamente por meio de um formulário de usuário modal. Para contornar esse problema, sugere-se que você adicione o código a seguir ao procedimento de evento Layout do formulário de usuário e então abra o formulário de usuário como sem janela restrita.

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

    Outra opção é abrir a janela da pasta de trabalho, ativar qualquer outra janela e então reativar a janela da pasta de trabalho. Agora você deverá ser capaz de fechar a pasta de trabalho usando o botão Fechar.

  • Suponha que o seu código VBA abra várias pastas de trabalho e use a propriedade DataEntryMode para controlar a entrada de dados e o fechamento da pasta de trabalho. No modelo SDI do Excel, como cada pasta de trabalho está contida em seu próprio processo, a propriedade DataEntryMode usada em uma pasta de trabalho não reconhece a existência de outra pasta de trabalho e, portanto, tem pouco ou nenhum efeito sobre sua interação. Para contornar esse problema, há algumas opções. Você pode ocultar as pastas de trabalho ou planilhas extras usando Window.Visible = False ou Sheet.Visible = False, respectivamente. Detectar e cancelar todos os eventos de fechamento usando Workbook.BeforeClose(Cancel) = True.

  • As barras de ferramentas adicionadas às pastas de trabalho do Excel por meio do código da barra de comando e dos arquivos XLA só serão exibidas depois que você fechar e reabrir a pasta de trabalho. A utilização de barras de comando para personalizar a IU foi preterida a partir do Excel 2007. A solução ideal é personalizar a IU da faixa de opções usando arquivos XML como descrito em detalhes no artigo Customizing the 2007 Office Fluent Ribbon for Developers

    Outra opção é usar um evento no nível do aplicativo para detectar a abertura de novas pastas de trabalho e, em seguida, usar Application.Windows em vez de pastas de trabalho para adicionar o controle de faixa de opções. A seguir, o código de exemplo que pode ser usado para fazer isso.

      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
    

    O código a seguir seria então usado para remover a barra de ferramentas antes do fechamento da pasta de trabalho.

      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
    
  • No Excel 2010, um formulário de usuário modeless é exibido como a janela de nível superior em cima de todas as janelas do Excel por padrão. No Excel 2013, um formulário de usuário sem janela restrita só estará visível em cima da janela da pasta de trabalho que estava ativa quando o formulário de usuário foi exibido. O MVP (Profissional Mais Valioso) do Excel, Jan Karel Pieterse, fornece uma explicação sobre o problema e uma solução em sua página da Web no https://www.jkp-ads.com/articles/keepuserformontop.asp.

Resumo

A nova Interface de Documento Único do Excel 2013 facilita o trabalho com várias pastas de trabalho. Você pode até arrastar as pastas de trabalho para monitores diferentes, se for conveniente. Você só precisa se lembrar de que há apenas uma janela principal e um menu de IU da faixa de opções por pasta de trabalho. Isso poderá exigir que você atualize todos os códigos existentes para armazenar em cache o estado dos controles e as configurações à medida que passa de pasta de trabalho para pasta de trabalho.

Confira também

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.