Sobre coautoria no Excel

Saiba mais sobre como o coautoria funciona no Excel e como você pode precisar ajustar seu suplemento ou macro para uma integração suave com coautoria.

Coautoria está disponível para todos os usuários do Excel Online. Esse recurso também está disponível no Excel para Windows Desktop, mas apenas para Office 365 clientes.

Introdução ao coautoria

Coautoria permite editar uma pasta de trabalho hospedada na nuvem (ou seja, OneDrive, OneDrive for Business ou SharePoint Online) simultaneamente com outros usuários. A cada salvamento, todos que editam a pasta de trabalho nesse momento podem ver alterações. Com o AutoSave habilitado, você pode ver as alterações de todos na pasta de trabalho em tempo real. Se você não estiver pronto para que outras pessoas vejam suas alterações, você poderá desativar o AutoSave até que esteja pronto para compartilhar suas alterações e receber as alterações de outras pessoas.

Princípios de coautoria

O Excel sincronizará automaticamente as alterações feitas na pasta de trabalho (seja por um usuário ou pelo código). Por exemplo, digamos que o código esteja em execução na instância de um usuário e modifique o conteúdo de uma célula como esta: Range("A1").Value = "myNewValue". O Excel cuidaria do envio dessa alteração para outros coautores.

Agora vamos dizer que há código em execução na instância de outro usuário que inspeciona o conteúdo dessa célula assim: MsgBox Range("A1").Value. O segundo usuário veria o valor "myNewValue" que havia sido definido pelo primeiro usuário.

No entanto, o Excel não sincronizará automaticamente nenhuma variável criada pelo código fora do conteúdo da pasta de trabalho. Por exemplo, digamos que o código lê um valor de uma célula e, em seguida, o carrega em uma variável:

Dim myVariable
myVariable = Range("A1").Value

O Excel não atualizará automaticamente o valor de myVariable, o que significa que myVariable não será mantido em sincronização com uma variável do mesmo nome criada pelo código em execução nas instâncias do Excel dos outros coautores.

Situações em que talvez seja necessário adaptar sua solução a um ambiente de coautoria

Como os suplementos e macros existentes podem contar com o Excel para transmitir perfeitamente as alterações feitas à pasta de trabalho para os coautores, você geralmente pode usar seu código neste novo ambiente sem fazer alterações ou atualizações. No entanto, em dois casos, talvez seja necessário adaptar o código se desejar que ele funcione sem problemas em uma configuração de coautoria:

Os eventos BeforeRemoteChange e AfterRemoteChange foram adicionados para permitir que você gerencie alterações remotas quando aplicável.

Suplementos que têm um estado interno na memória fora do conteúdo da pasta de trabalho

Imagine um suplemento que permite que o usuário crie gráficos personalizados com base em dados em uma pasta de trabalho do Excel. Esse suplemento carrega dados para os gráficos do usuário em uma planilha oculta na pasta de trabalho. Quando um usuário abre um arquivo que contém os gráficos personalizados, o suplemento lê dados na planilha oculta e carrega o gráfico na memória. À medida que o usuário edita o gráfico, essa estrutura na memória é atualizada e recriada no arquivo antes de cada salvamento. Esse suplemento pressupõe que a única vez que é necessário ler a planilha oculta e carregá-la na memória é quando o arquivo é aberto.

Coautoria abre outra possibilidade: a planilha oculta pode ser modificada por outro usuário que executa o mesmo suplemento ao mesmo tempo. Se isso ocorrer, os gráficos que os usuários estão exibindo poderão ficar fora de sincronização. Por exemplo:

  • Suponha que o Usuário A abra o arquivo e comece a exibir um gráfico personalizado existente.
  • Enquanto ela está fazendo isso, o Usuário B abre o mesmo arquivo e começa a fazer alterações no gráfico personalizado (por exemplo, altera o tipo de gráfico).
  • Essa alteração seria salva na planilha pelo suplemento no computador do Usuário B, mas o Usuário A nunca veria a alteração até que ela recarregasse o arquivo.

Solução alternativa

O máximo possível, tente evitar fazer suposições sobre quando os dados da pasta de trabalho podem ser alterados. Nesse caso, você pode modificar o suplemento para reagir ao evento AfterRemoteChange e, em seguida, verificar os valores da planilha oculta para ver se eles precisam ser lidos novamente pelo suplemento para permitir que o Usuário A exiba as alterações no gráfico feitas pelo usuário B. O suplemento deve ser executado sempre que o intervalo de gráficos for alterado. Isso acontece na carga e pode acontecer com uma alteração remota. Como tal, sua lógica em AfterRemoteChange deve executar novamente o suplemento.

Suplementos que aproveitam eventos

Seu suplemento ou macro já pode assinar eventos de salvamento ou alteração. Com a introdução do coautoria, você pode ter problemas com:

Salvar eventos

Você pode ter problemas quando seu código usa eventos de salvamento, como BeforeSave e AfterSave. Para obter mais informações, confira Possíveis problemas com eventos de salvamento e AutoSave.

Alterar eventos

Por padrão, seu código geralmente não precisa lidar com alterações de usuários remotos. No entanto, há alguns casos em que lidar com alterações remotas pode causar problemas. Dois cenários de exemplo são explorados aqui.

Cenário de exemplo: validação de dados

Um evento de alteração é disparado quando um intervalo específico é editado na pasta de trabalho. O código de suplemento valida a alteração e, se a verificação falhar, notifica o usuário por meio de uma janela pop-up. No entanto, se todos os usuários remotos que colaboram nessa pasta de trabalho forem notificados sobre uma falha de validação não relacionada às suas próprias alterações, isso poderá levar a uma experiência ruim.

Exemplo

Para este exemplo, foi criado um gráfico que exibe quanto foi feito vendendo várias sobremesas. Nem o custo nem o número de itens vendidos devem ser negativos, portanto, há uma verificação de validação que exibe uma mensagem para o usuário. Quando o valor inválido é enviado por push para os usuários remotos, a mensagem de validação não deve ser exibida para eles.

Public Sub ValidateFigures()
    Dim rangeToValidate As Range
    Set rangeToValidate = ActiveWorkbook.Worksheets("Chart").Range("B2:C6")
    For Each cell In rangeToValidate.Cells
        If (cell.Value < 0) Then
            MsgBox ("Error: Value should not be negative. " & cell.Address)
        End If
    Next
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    ActiveWorkbook.Worksheets("Chart").ValidateFigures
End Sub

Como tal, não há necessidade de assinar o evento BeforeRemoteChange ou AfterRemoteChange nesse caso.

Private Sub Workbook_AfterRemoteChange()
    ' Do not call validation from RemoteChange event
    'ActiveWorkbook.Worksheets("Chart").ValidateFigures
End Sub

Figura 1. Exemplo de gráfico que representa as vendas de sobremesa

vendas de sobremesa

Cenário de exemplo: consistência de dados

Um evento de alteração é disparado e seu código de suplemento sincroniza os dados na pasta de trabalho com dados em outra parte da pasta de trabalho ou em um sistema externo. Se um usuário remoto receber a alteração que faz com que o código de suplemento sincronize os mesmos dados, isso poderá levar à diminuição do desempenho do usuário remoto ou da duplicação de dados no sistema externo.

Possíveis problemas com eventos de alteração

Embora normalmente você não queira que o código do manipulador de eventos seja executado em resposta a alterações de um usuário remoto, o comportamento padrão de não disparar eventos de alteração pode causar problemas. A seguir estão alguns exemplos de problemas e como você pode contornar eles usando eventos BeforeRemoteChange e AfterRemoteChange .

Cenário de exemplo: visualização de dados

O suplemento plota pontos de dados em um mapa com base nos dados de localização encontrados em um intervalo na pasta de trabalho. Se um usuário editar qualquer um dos dados de localização, todos os usuários remotos devem receber essa alteração para que o mapa de cada usuário possa ser atualizado.

Exemplo

Digamos que você tenha criado um mapa personalizado. Neste exemplo, você pode adicionar código para alterar dados de local e atualizar o mapa. A pasta de trabalho é compartilhada com alguém em uma cidade diferente. Com o AutoSave ativado, a alteração é passada para o usuário remoto, mas o mapa desse usuário não será atualizado.

Public Sub UpdateMap()
    'Code that updates map
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    'Call subroutine that updates map
End Sub

Agora use o evento AfterRemoteChange para adicionar código que atualiza o mapa. As alterações subsequentes enviadas ao usuário remoto são usadas para atualizar o mapa.

Private Sub Workbook_AfterRemoteChange()
    'Call subroutine that updates map
End Sub

Figura 2. Exemplo de mapa de Londres com alguns pontos de interesse

locais de Londres

Cenário de exemplo: painel de tarefas de navegação

O suplemento exibe todas as guias atuais da pasta de trabalho em um painel de tarefas para facilitar a navegação. Se um usuário adicionar uma planilha, todos os usuários remotos receberão essa alteração para que o painel de tarefas de cada usuário possa exibir um link para a nova planilha.

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.