Acerca de la coautoría en Excel

Obtenga información sobre cómo funciona la coautoría en Excel y cómo puede que necesite ajustar el complemento o la macro para una integración fluida con la coautoría.

Coautoría está disponible para todos los usuarios de Excel Online. Esta característica también está disponible en Excel para Windows Desktop, pero solo para Office 365 clientes.

Introducción a la coautoría

Coautoría permite editar un libro hospedado en la nube (es decir, OneDrive, OneDrive para la Empresa o SharePoint Online) simultáneamente con otros usuarios. Con cada guardado, todos los usuarios que editen el libro en ese momento pueden ver los cambios. Con Autoguardado habilitado, puede ver los cambios de todos en el libro en tiempo real. Si no está listo para que otros usuarios vean los cambios, puede desactivar Autoguardar hasta que esté listo para compartir los cambios y recibir los cambios de otros usuarios.

Principios de coautoría

Excel sincronizará automáticamente los cambios realizados en el libro (ya sea por un usuario o por el código). Por ejemplo, supongamos que el código se ejecuta en la instancia de un usuario y modifica el contenido de una celda como esta: Range("A1").Value = "myNewValue". Excel se encargaría de enviar este cambio a otros coautores.

Ahora supongamos que hay código en ejecución en la instancia de otro usuario que inspecciona el contenido de esa celda de la siguiente manera: MsgBox Range("A1").Value. El segundo usuario vería el valor "myNewValue" establecido por el primer usuario.

Sin embargo, Excel no sincronizará automáticamente ninguna variable creada por el código fuera del contenido del libro. Por ejemplo, supongamos que el código lee un valor de una celda y, a continuación, lo carga en una variable:

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

Excel no actualizará automáticamente el valor de myVariable, lo que significa que myVariable no se mantendrá sincronizado con una variable del mismo nombre creada por el código que se ejecuta en las instancias de Excel de los otros coautores.

Situaciones en las que es posible que tenga que adaptar la solución a un entorno de coautoría

Dado que los complementos y macros existentes pueden confiar en Excel para transmitir sin problemas los cambios que realizan en el libro a los coautores, normalmente puede usar el código en este nuevo entorno sin realizar cambios ni actualizaciones. Sin embargo, en dos casos, es posible que tenga que adaptar el código si desea que funcione sin problemas en una configuración de coautoría:

Los eventos BeforeRemoteChange y AfterRemoteChange se agregaron para permitirle administrar los cambios remotos cuando corresponda.

Complementos que tienen un estado interno en memoria fuera del contenido del libro

Imagine un complemento que permita al usuario crear gráficos personalizados basados en datos de un libro de Excel. Este complemento carga los datos de los gráficos del usuario en una hoja oculta del libro. Cuando un usuario abre un archivo que contiene los gráficos personalizados, el complemento lee los datos de la hoja oculta y carga el gráfico en memoria. A medida que el usuario edita el gráfico, esta estructura en memoria se actualiza y se vuelve a escribir en el archivo antes de guardarla. En este complemento se supone que la única vez que es necesario leer la hoja oculta y cargarla en la memoria es cuando se abre el archivo.

Coautoría abre otra posibilidad: otro usuario que ejecute el mismo complemento podría modificar la hoja oculta al mismo tiempo. Si esto ocurre, es posible que los gráficos que ven los usuarios no estén sincronizados. Por ejemplo:

  • Supongamos que el usuario A abre el archivo y comienza a ver un gráfico personalizado existente.
  • Mientras lo hace, el usuario B abre el mismo archivo y comienza a realizar cambios en el gráfico personalizado (por ejemplo, cambia el tipo de gráfico).
  • Ese cambio se guardaría en la hoja mediante el complemento en el equipo del usuario B, pero el usuario A nunca vería el cambio hasta que vuelva a cargar el archivo.

Solución alternativa

En la medida de lo posible, intente evitar hacer suposiciones sobre cuándo se pueden cambiar los datos del libro. En este caso, podría modificar el complemento para reaccionar al evento AfterRemoteChange y, a continuación, comprobar los valores de la hoja oculta para ver si el complemento necesita volver a leerlos para permitir al usuario A ver los cambios en el gráfico que realizó el usuario B. El complemento está pensado para ejecutarse cada vez que se cambia el intervalo de gráficos. Esto sucede en la carga y puede ocurrir con un cambio remoto. Como tal, la lógica de AfterRemoteChange debe volver a ejecutar el complemento.

Complementos que aprovechan eventos

Es posible que el complemento o la macro ya se suscriban para guardar o cambiar eventos. Con la introducción de la coautoría, puede experimentar problemas con:

Guardar eventos

Puede experimentar problemas cuando el código usa eventos de guardado, como BeforeSave y AfterSave. Para obtener más información, consulte Posibles problemas con los eventos de guardado y autoguardado.

Cambiar eventos

De forma predeterminada, el código normalmente no necesita controlar los cambios de los usuarios remotos. Sin embargo, hay algunos casos en los que el control de cambios remotos puede causar problemas. Aquí se exploran dos escenarios de ejemplo.

Escenario de ejemplo: validación de datos

Se desencadena un evento de cambio cuando se edita un intervalo específico en el libro. A continuación, el código del complemento valida el cambio y, si se produce un error en la comprobación, notifica al usuario a través de una ventana emergente. Sin embargo, si todos los usuarios remotos que colaboran en ese libro reciben una notificación sobre un error de validación no relacionado con sus propios cambios, esto puede dar lugar a una experiencia deficiente.

Ejemplo:

En este ejemplo, se ha creado un gráfico que muestra cuánto se ha hecho al vender varios postres. Ni el costo ni el número de artículos vendidos deben ser negativos, por lo que hay una comprobación de validación que muestra un mensaje al usuario. Cuando el valor no válido se inserta en los usuarios remotos, el mensaje de validación no debe mostrarse a ellos.

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

Por lo tanto, no es necesario suscribirse al evento BeforeRemoteChange o AfterRemoteChange en este caso.

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

Figura 1. Ejemplo de gráfico que representa las ventas de postres

ventas de postres

Escenario de ejemplo: Coherencia de datos

Se desencadena un evento de cambio y el código del complemento sincroniza los datos del libro con los datos de otra parte del libro o de un sistema externo. Si un usuario remoto recibe el cambio que hace que el código del complemento sincronice los mismos datos, esto puede provocar un menor rendimiento para el usuario remoto o la duplicación de datos en el sistema externo.

Posibles problemas con eventos de cambio

Aunque normalmente no querría que el código del controlador de eventos se ejecutara en respuesta a los cambios de un usuario remoto, el comportamiento predeterminado de no activar eventos de cambio podría causar problemas. A continuación se muestran algunos ejemplos de problemas y cómo puede solucionarlos mediante los eventos BeforeRemoteChange y AfterRemoteChange .

Escenario de ejemplo: visualización de datos

El complemento traza puntos de datos en un mapa en función de los datos de ubicación que se encuentran en un intervalo del libro. Si un usuario edita cualquiera de los datos de ubicación, todos los usuarios remotos deben recibir este cambio para que se pueda actualizar el mapa de cada usuario.

Ejemplo:

Supongamos que ha creado un mapa personalizado. En este ejemplo, podría agregar código para cambiar los datos de ubicación y, a continuación, actualizar el mapa. El libro se comparte con alguien de una ciudad diferente. Con AutoGuardar activado, el cambio se pasa al usuario remoto, pero el mapa de ese usuario no se actualizará.

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

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

Ahora, use el evento AfterRemoteChange para agregar código que actualice la asignación. Los cambios posteriores enviados al usuario remoto se usan para actualizar el mapa.

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

Figura 2. Ejemplo de mapa de Londres con algunos puntos de interés

ubicaciones de londres

Escenario de ejemplo: panel de tareas de navegación

El complemento muestra todas las pestañas de libro actuales en un panel de tareas para facilitar la navegación. Si un usuario agrega una hoja de cálculo, todos los usuarios remotos deben recibir este cambio para que el panel de tareas de cada usuario pueda mostrar un vínculo a la nueva hoja de cálculo.

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.