Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Saiba como funciona a cocriação no Excel e como poderá ter de ajustar o seu suplemento ou macro para uma integração suave com a cocriação.
Coautoria está disponível para todos os utilizadores do Excel Online. Esta funcionalidade também está disponível no Excel para Ambiente de Trabalho do Windows, mas apenas para Office 365 clientes.
Introdução à cocriação
Coautoria permite-lhe editar um livro alojado na nuvem (ou seja, OneDrive, OneDrive for Business ou SharePoint Online) em simultâneo com outros utilizadores. A cada guardar, todas as pessoas que editam o livro nessa altura podem ver alterações. Com a funcionalidade Guardar Automaticamente ativada, pode ver as alterações de todas as pessoas ao livro em tempo real. Se não estiver pronto para que outras pessoas vejam as suas alterações, pode desativar a funcionalidade Guardar Automaticamente até estar pronto para partilhar as suas alterações e receber as alterações de outras pessoas.
Princípios da cocriação
O Excel sincronizará automaticamente as alterações efetuadas ao livro (seja por um utilizador ou pelo seu código). Por exemplo, digamos que o código está em execução na instância de um utilizador e modifica o conteúdo de uma célula como esta: Range("A1").Value = "myNewValue". O Excel trataria de enviar esta alteração para outros cocriadores.
Agora, digamos que existe código em execução na instância de outro utilizador que inspeciona o conteúdo dessa célula da seguinte forma: MsgBox Range("A1").Value. O segundo utilizador veria o valor "myNewValue" que tinha sido definido pelo primeiro utilizador.
No entanto, o Excel não sincronizará automaticamente quaisquer variáveis criadas pelo seu código fora do conteúdo do livro. Por exemplo, digamos que o código lê um valor de uma célula e, em seguida, carrega-o para 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 sincronizado com uma variável com o mesmo nome criado pelo código em execução nas instâncias do Excel dos outros cocriadores.
Situações em que poderá ter de adaptar a sua solução a um ambiente de cocriação
Uma vez que os suplementos e macros existentes podem depender do Excel para transmitir de forma totalmente integrada as alterações que efetuam ao livro para os cocriadores, normalmente pode utilizar o código neste novo ambiente sem efetuar alterações ou atualizações. No entanto, em dois casos, poderá ter de adaptar o código se quiser que funcione sem problemas numa definição de cocriação:
- Suplementos que têm um estado interno dentro da memória fora do conteúdo do livro
- Suplementos que tiram partido dos eventos
Os eventos BeforeRemoteChange e AfterRemoteChange foram adicionados para lhe permitir gerir as alterações remotas quando aplicável.
Suplementos que têm um estado interno dentro da memória fora do conteúdo do livro
Imagine um suplemento que permite ao utilizador criar gráficos personalizados com base em dados num livro do Excel. Este suplemento carrega dados para os gráficos do utilizador numa folha oculta no livro. Quando um utilizador abre um ficheiro que contém os gráficos personalizados, o suplemento lê os dados na folha oculta e carrega o gráfico para a memória. À medida que o utilizador edita o gráfico, esta estrutura dentro da memória é atualizada e recriada no ficheiro antes de cada guardar. Este suplemento pressupõe que a única vez que é necessário ler a folha oculta e carregá-la para a memória é quando o ficheiro é aberto.
Coautoria abre outra possibilidade: a folha oculta pode ser modificada por outro utilizador que execute o mesmo suplemento ao mesmo tempo. Se isto ocorrer, os gráficos que os utilizadores estão a ver poderão ficar dessincronizados. Por exemplo:
- Suponha que o Utilizador A abre o ficheiro e começa a visualizar um gráfico personalizado existente.
- Enquanto o faz, o Utilizador B abre o mesmo ficheiro e começa a fazer alterações ao gráfico personalizado (por exemplo, altera o tipo de gráfico).
- Essa alteração seria guardada na folha pelo suplemento no computador do Utilizador B, mas o Utilizador A nunca veria a alteração até recarregar o ficheiro.
Solução alternativa
Tanto quanto possível, tente evitar fazer suposições sobre quando os dados do livro podem ser alterados. Neste caso, pode modificar o suplemento para reagir ao evento AfterRemoteChange e, em seguida, marcar os valores da folha oculta para ver se precisam de ser lidos novamente pelo suplemento para permitir que o Utilizador A veja as alterações do gráfico efetuadas pelo Utilizador B. O suplemento destina-se a ser executado sempre que o intervalo do gráfico for alterado. Isto acontece na carga e pode ocorrer com uma alteração remota. Como tal, a lógica em AfterRemoteChange deve executar novamente o suplemento.
Suplementos que tiram partido dos eventos
O seu suplemento ou macro pode já subscrever para guardar ou alterar eventos. Com a introdução da cocriação, poderá ter problemas com:
Guardar eventos
Poderá deparar-se com problemas quando o código utiliza eventos de gravação como AntesGuardar e DepoisGuardar. Para obter mais informações, veja Potenciais problemas com eventos de guardar e Guardar Automaticamente.
Alterar eventos
Por predefinição, o código normalmente não precisa de processar alterações de utilizadores remotos. No entanto, existem alguns casos em que o processamento 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 de alteração é acionado quando um intervalo específico é editado no livro. Em seguida, o código do suplemento valida a alteração e, se o marcar falhar, notifica o utilizador através de uma janela de pop-up. No entanto, se todos os utilizadores remotos que colaboram nesse livro forem notificados sobre uma falha de validação não relacionada com as suas próprias alterações, tal pode levar a uma má experiência.
Exemplo
Para este exemplo, foi criado um gráfico que mostra quanto foi feito para vender várias sobremesas. Nem o custo nem o número de itens vendidos devem ser negativos, pelo que existe uma validação marcar que apresenta uma mensagem ao utilizador. Quando o valor inválido é emitido para os utilizadores remotos, a mensagem de validação não deve ser apresentada aos mesmos.
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 é necessário subscrever o evento BeforeRemoteChange ou AfterRemoteChange neste 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 sobremesas
Cenário de exemplo: Consistência de dados
É acionado um evento de alteração e o código do suplemento sincroniza os dados no livro com dados noutra parte do livro ou num sistema externo. Se um utilizador remoto receber a alteração que faz com que o código do suplemento sincronize os mesmos dados, tal pode levar a uma diminuição do desempenho do utilizador remoto ou da duplicação de dados no sistema externo.
Potenciais problemas com eventos de alteração
Embora normalmente não queira que o código do processador de eventos seja executado em resposta a alterações de um utilizador remoto, o comportamento predefinido de não acionar eventos de alteração pode causar problemas. Seguem-se alguns exemplos de problemas e como pode contornar os mesmos com os eventos BeforeRemoteChange e AfterRemoteChange .
Cenário de exemplo: visualização de dados
O seu suplemento desenha pontos de dados num mapa com base nos dados de localização encontrados num intervalo no livro. Se um utilizador editar qualquer um dos dados de localização, todos os utilizadores remotos devem receber esta alteração para que o mapa de cada utilizador possa ser atualizado.
Exemplo
Digamos que criou um mapa personalizado. Neste exemplo, pode adicionar código para alterar os dados de localização e, em seguida, atualizar o mapa. O livro é partilhado com alguém numa cidade diferente. Com a funcionalidade Guardar Automaticamente ativada, a alteração é transmitida ao utilizador remoto, mas o mapa desse utilizador 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, utilize o evento AfterRemoteChange para adicionar código que atualiza o mapa. As alterações subsequentes enviadas ao utilizador remoto são utilizadas 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
Cenário de exemplo: painel de tarefas de navegação
O suplemento apresenta todos os separadores atuais do livro num painel de tarefas para facilitar a navegação. Se um utilizador adicionar uma folha de cálculo, todos os utilizadores remotos devem receber esta alteração para que o painel de tarefas de cada utilizador possa apresentar uma ligação para a nova folha de cálculo.
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.