Sobre a coautoria no Excel

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

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

Introdução ao coauthoring

Coauthoring permite que você editar uma pasta de trabalho hospedada na nuvem (ou seja, o OneDrive, o OneDrive for Business ou SharePoint Online) simultaneamente com outros usuários. Com cada salvar, todos editando a pasta de trabalho no momento poderá ver as alterações. Com o salvamento automático habilitado, você pode ver de todos os participantes alterações na pasta de trabalho em tempo real. Se você não estiver pronto para que outros possam ver suas alterações, você pode desativar salvamento automático até que você está pronto para compartilhar suas alterações e receber as alterações dos outros.

Princípios de coautoria

Excel sincronizará automaticamente as alterações feitas na pasta de trabalho (se por um usuário ou seu código). Por exemplo, suponha que o código está sendo executado na instância de um usuário e modifica o conteúdo de uma célula semelhante a esta: Range("A1").Value = "myNewValue". Excel seria cuidam de envio essa alteração para outros coauthors.

Agora, vamos vamos supor que haja é o código em execução na instância de outro usuário que inspeciona o conteúdo da célula semelhante a esta: MsgBox Range("A1").Value. O segundo usuário veria o valor "myNewValue" que tiver sido definida pelo primeiro usuário.

No entanto, será do Excel não sincronizar automaticamente todas as variáveis criadas pelo seu código fora o conteúdo da pasta de trabalho. Por exemplo, suponha que seu código lê um valor de uma célula e, em seguida, ele é carregado em uma variável:

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

Excel não será atualizada automaticamente o valor da myVariable, significando que myVariable não será mantido em sincronia com uma variável de mesmo nome que é criado pelo código em execução em instâncias de Excel a outros coauthors.

Situações em que você talvez precise adaptar sua solução em um ambiente de coautoria

Como suplementos e macros existentes podem dependem do Excel para transmitir perfeitamente as alterações feitas na pasta de trabalho para os coauthors, você geralmente pode usar seu código nesse novo ambiente sem fazer quaisquer alterações ou atualizações. No entanto, nos dois casos, talvez seja necessário adaptar-se o seu código se você deseja que ele funcionará sem problemas em uma configuração de coautoria:

Eventos BeforeRemoteChange e AfterRemoteChange foram adicionados para permitir que você gerencie alterações remotas, onde aplicável.

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

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

Coauthoring abre outra possibilidade: planilha oculta que pode ser modificada por outro usuário que executa o suplemento mesmo ao mesmo tempo. Caso isso aconteça, os gráficos que os usuários estão vendo podem se tornar fora de sincronia. Por exemplo:

  • Vamos supor que inicia a exibição de um gráfico personalizado existente e abre o arquivo do usuário.
  • Enquanto ela está fazendo isso, o usuário B abre o mesmo arquivo e inicia a aplicar alterações para o gráfico personalizado (por exemplo, altera o tipo de gráfico).
  • Essa alteração seria salvas à planilha pelo add-in no computador do usuário B, mas o usuário A veria nunca a alteração até que ela recarregado o arquivo.

Solução alternativa

Tente tanto quanto possível, evite fazer suposições sobre quando dados de pasta de trabalho podem ser alterados. Nesse caso, você pode modificar o suplemento para reagir ao evento AfterRemoteChange e verifique se os valores da planilha oculta para ver se eles precisam ser lido novamente pelo suplemento para permitir que o usuário A exibir as alterações de gráfico que o usuário B feitas. O suplemento é destinado a ser executado sempre que o intervalo de gráfico é alterado. Isso acontece no carregamento e pode acontecer com uma alteração remota. Sendo assim, a lógica de AfterRemoteChange novamente deve executar o suplemento.

Suplementos que aproveitam os eventos

Já pode se inscrever seu suplemento ou uma macro para salvar ou eventos de alteração. Com a introdução das coauthoring, você pode enfrentar problemas com:

Salvar eventos

Você poderá ter problemas ao seu usa código salva eventos como BeforeSave e AfterSave. Para obter mais informações, consulte potenciais problemas com a salvar eventos e o salvamento automático.

Eventos de alteração

Por padrão, seu código geralmente não precisa manipular as alterações dos usuários remotos. No entanto, há alguns casos onde a manipulação de 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 change é disparado quando um intervalo específico é editado na pasta de trabalho. Seu código de suplemento, em seguida, 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 colaborando em pasta de trabalho são notificados sobre uma falha de validação não relacionada às suas próprias alterações, isso pode levar a uma experiência de baixa.

Exemplo

Nesse exemplo, foi criado um gráfico que exibe a quantidade foi feita vendendo sobremesas vários. Nem o custo nem o número de itens vendidos deve ser negativo, portanto, há uma verificação de validação que exibe uma mensagem ao usuário. Quando o valor inválido é transferido para os usuários remotos, a mensagem de validação não deve ser exibida para acessá-los.

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

Sendo assim, não é necessário para assinar o BeforeRemoteChange ou AfterRemoteChange evento nesse caso.

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

Figura 1. Amostra do gráfico que representam vendas sobremesa

vendas sobremesa


Cenário de exemplo: consistência de dados

Um evento change é 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 recebe as alterações que faz com que o código de suplemento sincronizar os mesmos dados, isso pode levar a diminuição do desempenho para a duplicação de dados ou de usuário remota no sistema externo.

Possíveis problemas com eventos de alteração

Embora normalmente não deseje seu código de manipulador de evento ser executada em resposta às alterações de um usuário remoto, o comportamento padrão de não disparar eventos de alteração poderia causar problemas. A seguir estão alguns exemplos de problemas e como você pode trabalhar em torno deles usando eventos BeforeRemoteChange e AfterRemoteChange .

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

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

Exemplo

Digamos que você tenha criado um mapa personalizado. Neste exemplo, você poderia adicionar código para alterar os dados de local e, em seguida, atualize o mapa. A pasta de trabalho é compartilhada com alguém em uma cidade diferente. Com o salvamento automático no, a alteração é passada para o usuário remoto, mas 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 o 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. Amostra do mapa de Londres com alguns pontos de interesse

locais de Londres


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

Seu suplemento exibe todas as guias de pasta de trabalho atual em um painel de tarefas para facilitar a navegação. Se um usuário adiciona uma planilha, todos os usuários remotos devem receber essa alteração para que o painel de tarefas de cada usuário pode exibir um link para a nova planilha.

Ver também

Conceitos

Salvamento automático

Recursos adicionais

Colaborar em pastas de trabalho do Excel ao mesmo tempo com coauthoring