Что такое хороший обходной путь для решения проблем со макросами vba в Excel - PullRequest
1 голос
/ 22 марта 2019

Я разработал книгу с поддержкой макросов, которая сохраняется в 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, которые можно использовать, чтобы не вызвать ошибку, чтобы этот метод работал, или как-то иначе, есть ли способ, которым я могу использовать код для непосредственного обращения с сообщением об ошибке, чтобы оно не отображалось и предложить сотрудникам сохранить файл копии без необходимости?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...