Program with Shared Workbooks

Once you share a workbook, any Visual Basic project it contains is no longer accessible. Excel can’t deal with multiple users editing the same macros, so it simply prevents changes to those macros. You can’t record new macros, either. However, you can run macros from shared workbooks.

Use the SaveAs method to share a workbook from within code. For example, the following code saves the active workbook for sharing:

Sub SaveAsShared(  )
    ActiveWorkbook.SaveAs , , , , , , xlShared
End Sub

Warning

Once you share a workbook, you can no longer edit the macros it contains. The macros still exist and they can still run; you just can’t change them. That’s because Excel doesn’t support shared editing in Visual Basic. To edit the macros, remove sharing.

To remove sharing, use the ExclusiveAccess method:

Sub RemoveSharing(  )
    If ThisWorkbook.MultiUserEditing Then _
      ThisWorkbook.ExclusiveAccess
End Sub

Removing sharing in this way erases change history and prevents other users who currently have the file open from saving their changes to the file. An alternate, kinder way to remove sharing is to save the workbook as a new file with the xlExclusive setting as shown here:

Sub SaveCopyAs(  )
    fil = ThisWorkbook.Path & "\" & "Copy of " & _
      ThisWorkbook.Name
    ThisWorkbook.SaveAs fil, , , , , , xlExclusive
End Sub

You can’t remove sharing in this way without renaming the file. The SaveAs method doesn’t change the access mode if you don’t specify a new filename.

When you save ...

Get Programming Excel with VBA and .NET now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.