Как обновить общую книгу с изменениями от других, прежде чем данные активного пользователя будут введены в лист? - PullRequest
3 голосов
/ 26 января 2012

У меня есть общая книга с поддержкой макросов, используемая для проведения викторины. У меня есть возможность настроить пользователей, которые могут получить доступ к тесту с помощью имен компьютеров. Все работает нормально. Тем не менее, я хотел бы представить функцию для записи основных дел, сделанных в рабочей книге. Пользователь не вводит ничего вручную в ячейки. Все записи сделаны с использованием пользовательских форм.

Я создал подпрограмму, которая запускается каждый раз, когда пользователь выполняет операцию, которую мне нужно захватить. Код работает как брелок, когда активен один пользователь. Проблема возникает, когда несколько пользователей одновременно получают доступ к файлу.

Проблема в том, что пользователю показывается приглашение выбрать, какое изменение выиграть при закрытии листа. Я не хочу, чтобы это случилось. Есть ли способ, с помощью которого можно удалить подсказку и сохранить все изменения.

Есть ли обходной путь для этого. Ниже приведен код, который у меня есть сейчас.

Sub Actions()
    QA_Quiz_Master.Save
    Application.ScreenUpdating = False
    UN = Evaluate("=UserNameWindows()")
    QuizN = Sheet4.Range("F2").Value
    totlog = Log.Range("A1048576").End(xlUp).Row + 1
    Select Case Action
        Case "Open"
            Log.Range("C" & totlog).Value = "Accessed"
        Case "Start"
            Log.Range("C" & totlog).Value = "Started Quiz"
        Case "Submit"
            Log.Range("C" & totlog).Value = "Submitted Quiz"
        Case "AdminContact"
            Log.Range("C" & totlog).Value = "Contacted Admin"
        Case "AccessRequest"
            Log.Range("C" & totlog).Value = "Sent Access Request"
        Case "Publish"
            Log.Range("C" & totlog).Value = "Published Quiz"
        Case "Republish"
            Log.Range("C" & totlog).Value = "Republished Quiz"
        Case "Withdraw"
            Log.Range("C" & totlog).Value = "Withdrew Quiz"
        Case "AnsPublish"
            Log.Range("C" & totlog).Value = "Published Answers"
    End Select
    Log.Range("A" & totlog).Value = UN
    Log.Range("B" & totlog).Value = QuizN
    Log.Range("D" & totlog).Value = Now()
    Log.Columns("A:D").EntireColumn.AutoFit
    Application.DisplayAlerts = False
    QA_Quiz_Master.Save
    Application.ScreenUpdating = True
End Sub

Ответы [ 3 ]

5 голосов
/ 04 февраля 2012

После некоторых исследований я сам решил проблему.Мне просто нужно было добавить следующий код в начале подпункта

If ActiveWorkbook.MultiUserEditing Then
    QA_Quiz_Master.AcceptAllChanges
    QA_Quiz_Master.Save
End If
1 голос
/ 28 января 2012

Когда вы устанавливаете книгу для общего доступа, посмотрите на вкладку «Дополнительно».По умолчанию он обновляет изменения при сохранении файла, но вы можете выбрать автоматическое обновление изменений каждые x минут.Вы также можете выбрать, хотите ли вы, чтобы Excel запрашивал, какие изменения выиграли, или хотите автоматически сохранять новые изменения.

0 голосов
/ 27 января 2012

Общие книги - это кошмар! Всегда следует избегать их использования. Я понял это, когда пару лет назад работал менеджером по операциям. Я хотел, чтобы мои менеджеры обновили общий отчет в конце дня и поверили, что это была катастрофа.

Вот альтернатива.

Использование пользовательской формы Excel в качестве внешнего интерфейса (т. Е. Если вам нужно использовать Excel) и использование базы данных Access в качестве внутреннего интерфейса. Если Excel не проблема, тогда перенесите все на MS Access. Я вижу, что вы проводите викторину здесь. MS Access - намного лучший вариант здесь.

Если вы хотите продолжить эту идею, дайте мне знать, и я могу объяснить ее подробно:)

Другие альтернативы, которые я использовал для сбора данных, - это отображение веб-страницы в INTRANET и сохранение результатов в базе данных Access / SQL.

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