Как проверить, была ли ячейка таблицы Excel отредактирована пользователем? - PullRequest
0 голосов
/ 28 января 2019

Какие есть варианты для мониторинга изменений в таблице Excel?

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

Есть ли другой способ?

Ответы [ 3 ]

0 голосов
/ 28 января 2019

Я полностью согласен с @ Michał Turczyn.По соображениям безопасности лучше вести записи об изменениях.Вы можете использовать:

Option Explicit
Dim OldValue As String

Private Sub Worksheet_Change(ByVal Target As Range)

    MsgBox "The old value was " & OldValue & "." & vbNewLine & _
            "The new value is " & Target.Value & "." & vbNewLine & _
            "Date of change " & Now & "." & vbNewLine & _
            "Change by " & Environ$("computername") & "."             

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    OldValue = Target.Value

End Sub
0 голосов
/ 28 января 2019

Я придумал код (как код, основанный на событиях - Worksheet_Change), подобный этому:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rg As Range
Set rg = Cells
Dim lastrow As Long
Dim username As String


If Intersect(Target, rg) Is Nothing Then Exit Sub

On Error GoTo ExitHere

Application.EnableEvents = False

With SomeOtherSheet
    lastrow = .Cells(.Rows.Count, "H").End(xlUp).Row
    .Range("H" & lastrow + 1) = Now
    .Range("I" & lastrow + 1) = Target.Address
    .Range("J" & lastrow + 1) = Environ("Username")
    .Range("K" & lastrow + 1) = Application.username
End With

ExitHere:
Application.EnableEvents = True
End Sub

Он записывает любые изменения, сделанные пользователем в данном Листе (тот, где коднаписано).На другом листе будет показано, кто, когда и где внес изменения.Единственная проблема, с которой я сталкиваюсь в этом вопросе, заключается в том, что пользователь должен включить макросы, иначе это не сработает ... Я не знаю, как разумно решить эту проблему ...

0 голосов
/ 28 января 2019

Ну, есть несколько способов.

По пути можно подписаться на событие Worksheet_Change таким методом:

Private Sub Worksheet_Change(ByVal Target As Range)
    'some code, which will compare values and store info in a file
End Sub

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

Кроме того, вам необходимо выполнить дополнительное кодирование, чтобы увидеть, является ли это изменение, которое вас интересует, но это оставлено на ваше усмотрение.Откройте для себя, как это в широком смысле, чтобы описать все варианты здесь:)

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