2015-06-02 5 views
0

Я пытаюсь отслеживать, что было сделано в моей книге, поэтому я хотел бы иметь копию листа с добавленными к нему комментариями с датой изменение и пользователь, который его изменил (не важно, что они меняют, но я хочу знать, какие ячейки они меняют с датами и именем пользователя), да, я знаю, что вы можете использовать копию и вставлять ее в качестве ссылки, но скрипт VBA, который у меня есть сейчас не признает изменения, сделанные в оригинальном листе ниже код:Связывание листа Excel с другим в той же книге с помощью VBA

Private Sub Worksheet_Change(ByVal Target As Excel.range) 
'If Target.Column <> 1 Then Exit Sub 
Dim ccc As range 
Dim comment As String 
Application.ScreenUpdating = False 
Application.Calculation = xlManual 

comment = ("Cell Last Edited: ") & Now & (" by ") & Application.UserName 
Target.ClearComments 
    For Each ccc In Target 
    range(ccc.Address).AddComment comment 
    Next ccc 

Application.ScreenUpdating = True 
Application.Calculation = xlAutomatic 
End Sub 

в, который работает очень хорошо, сейчас, чтобы быть ясно, что я хочу, сценарий, который копирует оригинальный лист к другому, и если кто-то внести изменения скопировать или изменить лист копирования и добавить комментарий с датой и имя пользователь

Любое предложение было бы здорово, и заранее спасибо: D

+0

Почему бы вам не сохранить исходное значение на «зеркале» и использовать комментарий ячейки «зеркальная», чтобы показать изменение? Альтернативно, используйте комментарий, чтобы сохранить оригинал. Как бы то ни было, на ваш вопрос можно было бы ответить, удалив лист «зеркало» при каждом редактировании и переиздании оригинала. – Jeeped

ответ

1

Не уверен, что если держать дубликат листа является самым простым способом: что, если пользователь вставить новые строки или столбцы (тысячи) или клетки в пределах имеющихся данных или графики, и т.д.

Я хотел бы предложить, ведение журнала изменений, подобных этому

  • Учитывая WorkBook с 2-мя листами (Лист1 и Лист2)
  • Лист1 содержит данные
  • Sheet2 будет содержать журнал с 4-мя столбцами: дата, имя пользователя, Cell, новое значение

тогда Лист1 будет содержать этот VBA код:


Option Explicit 

Private logLine As Long 

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Target.CountLarge < 1000 Then ' don't log deletion of all cells on Sheet1 

     Dim editedCell As String 

     ' get the clean cell address ("A1" instead of "$A$1") 
     editedCell = Target.Address(RowAbsolute:=False, ColumnAbsolute:=False) 

     With Sheet2  ' generate all log lines on Sheet2 

      logLine = logLine + 1 ' move to the next row on Sheet2 

      ' Column 1: Date and Time 
      .Cells(logLine, 1).Value2 = Format(Now, "ddd mmm dd, yyyy hh:mm:ss") 

      ' Column 2: User Name 
      .Cells(logLine, 2).Value2 = Application.UserName 

      ' Column 3: link to the edited cell, also showing the cell itself 
      .Hyperlinks.Add _ 
       Anchor:=.Cells(logLine, 3), _ 
       Address:=vbNullString, _ 
       SubAddress:="Sheet1!" & editedCell, _ 
       TextToDisplay:=editedCell 

      ' Column 4: the new value 
      .Cells(logLine, 4).Value2 = Target.Value2 
     End With 
    End If 
End Sub 

На Лист2 у вас будет 4 столбца:

 Date-Time   User Nane Cell New Value 
Wed Jun 03, 2015 01:07:43 User1  A1  Test 1 
Wed Jun 03, 2015 01:07:48 User2  B3  Test 3 
Wed Jun 03, 2015 01:07:52 User5  D2  Test 7 
+0

Спасибо, теперь они не могут добавить больше строк или столбцов на листе; отличный код vba, он работает очень хорошо, не слишком хорошо, чтобы определить, где они вносили изменения (если вы не открываете его дважды), но я нашел обходное решение не слишком большим, как что-то автоматическое, как код vba, но если я возьму последний отчет и текущий отчет и сравнивается тогда в 3 листах с функцией = IF, тогда я могу отслеживать, где они изменились, но не пользователь, который изменил, в котором это то, что я хотел бы. – Namaro

0

Зачем вам нужен код VBA в первую очередь? Вы можете просто использовать уже встроенную функцию отслеживания изменений в Excel (Review - Changes - Track Changes). Когда пользователи внесут свои изменения, сохраните и закройте книгу; вы можете просто перейти к строке «Выделение изменений» в функции «Изменения пути» и выбрать «Сменить изменения на новом листе». Это создаст новый лист и покажет всю необходимую информацию (номер действия, дата, время, кто, изменение, лист, диапазон, новое значение, старое значение и т. Д.).

+0

Спасибо, большое предложение, но я смотрел больше на точку зрения vba, так как я хочу, чтобы это было очень автоматическим и меньше работать для администратора, который будет управлять этим файлом, также не очень легко отслеживать, где они сделаны изменения, если вы не откроете этот файл дважды (в режиме чтения) и не проверите данные в нем. – Namaro

Смежные вопросы