Я разработал книгу с поддержкой макросов, которая сохраняется в OneDrive, в которой отображается ежедневный список сотрудников и список задач для сотрудников нашей компании. Рабочая книга может добавлять задачи или помечать их как выполненные на нескольких компьютерах, на которых она может быть открыта. Как я обнаружил вскоре после создания этой книги, функция совместного редактирования не совместима с книгами с поддержкой макросов, поэтому, если файл открывается на нескольких компьютерах, появляется сообщение об ошибке, в котором говорится, что изменения не могут быть сохранены из-за неподдерживаемых изменений, внесенных кем-либо. остальное. Сотрудники смущаются и раздражаются из-за этого и в конечном итоге сохраняют несколько копий файла с каждым внесенным ими отдельным изменением, что довольно неудобно.
Я узнал, что простое отключение автосохранения и, следовательно, функция совместного редактирования при его открытии предотвратит проблемы, однако, если файл открывается с отключенным автосохранением, он не может быть открыт другими пользователями. Не обязательно, чтобы файл открывался одновременно на нескольких компьютерах, но было бы неплохо, если бы было решение для этого. Тем не менее, необходимо иметь возможность переключаться между тем, у кого файл открыт, так что если кто-то оставит его открытым на компьютере, а кто-то другой захочет открыть его на своем компьютере, он откроется, а затем на компьютере предыдущих пользователей его отключит автосохранение, закроет файл или просто отправит уведомление, чтобы предотвратить появление ошибок на компьютере других пользователей.
Ниже приведены некоторые блоки кода, в которых я пытаюсь воспользоваться преимуществами совместного редактирования и использовать изменение ячейки, чтобы определить, когда другой компьютер открывает файл, и использовать это событие, чтобы отключить автосохранение, чтобы предотвратить появление сообщений об ошибках. Как вы можете догадаться, это наталкивается на проблему, заключающуюся в том, что сам код, который изменяет ячейку, вызывает сообщение об ошибке «Неподдерживаемые изменения функции, сделанные кем-то другим», прежде чем он сможет предотвратить это.
Module 1: Public TOmsgShown As Boolean
Private Sub Workbook_Open()
TOmsgShown = False
Dim currentuser As Range
Set currentuser = Sheets(1).Cells(1, 100)
If IsEmpty(currentuser) = False Then
userswitch = MsgBox(currentuser.Value & " has currently got this workbook open, and it is only able to be edited by one person at a time. " & _
"Do you want to take over editing capabilities? No to open this as read-only (any changes made will not be saved) or Yes to force " & currentuser.Value & " to switch to read-only.", vbYesNo)
If userswitch = vbNo Then
ThisWorkbook.ChangeFileAccess (xlReadOnly)
ThisWorkbook.AutoSaveOn = False
Else
currentuser.Value = Application.UserName
End If
Else
currentuser.Value = Application.UserName
End If
ThisWorkbook.Save
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Sheets(1).Cells(1, 100).Value <> Application.UserName And TOmsgShown = False Then
Application.DisplayAlerts = False
ThisWorkbook.AutoSaveOn = False
ThisWorkbook.ChangeFileAccess (xlReadOnly)
TOmsgShown = True
MsgBox (Sheets(1).Cells(1, 100).Value & " has opened up this roster and taken over editing capabilities. You will now be switched to Read-Only mode and can not save any changes made. Re-open this workbook to continue editing.")
Cancel = True
End If
End Sub
Существуют ли какие-либо события vba, которые можно использовать, чтобы не вызвать ошибку, чтобы этот метод работал, или как-то иначе, есть ли способ, которым я могу использовать код для непосредственного обращения с сообщением об ошибке, чтобы оно не отображалось и предложить сотрудникам сохранить файл копии без необходимости?