Отметка даты при редактировании строк в электронной таблице

Отметка даты при редактировании строк в электронной таблице

У меня есть электронная таблица, которая требует отметки даты для каждой строки, как только в ячейках этой строки вносятся изменения. Например, я меняю что-то в ячейке B14, E14 или G14, и сегодняшняя дата появляется в K14. Очевидно, мне нужно иметь возможность выбрать диапазон строк и столбцов, которые будут затронуты.

Однако сложность в моем случае заключается в том, что мне нужно, чтобы появилась сегодняшняя дата.ТОЛЬКОкогда ядобавлятьилиизменятьинформация в ячейке. Если я простоудалитьинформация из ячейки мне нужно чтобы дата осталась такой же как и до удаления информации.

P.S. Файл представляет собой электронную таблицу Excel, но он будет использоваться на Google Диске.

решение1

Этот ответ можно получить, если обратиться непосредственно к Google Таблицам.

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

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

Также обратите внимание, что вам придется перейти в Инструменты -> Редактор скриптов внутри Google Таблицы, а затем Ресурсы -> Триггеры (меню может отличаться в зависимости от того, что вы там делали ранее) и добавить триггер «onEdit()» в Таблицу.

Тогда ваша функция будет выглядеть примерно так:

function onEdit(e){
  var DateCol = "K";
  var DeletedColNote = "L";
  var curDate = Utilities.formatDate(new Date(), "GMT-5", "MM/dd/yyyy") 
  var editRange = e.range;
  var rowIndex = editRange.getRowIndex();
  var colIndex = editRange.getColumnIndex();

  // May need to set up multiple ranges like this and check all ranges if
  // checked fields are not in adjacent cells
  var watchRange = { // B2:G20
    top : 2,         // start row
    bottom : 20,     // end row
    left : 2,        // start col
    right : 7        // end col
  };
  // Exit if we're out of range
  if (rowIndex < watchRange.top || rowIndex > watchRange.bottom) return;
  if (colIndex < watchRange.left || colIndex > watchRange.right) return;

  var currentValue = editRange.getValue();
  currentValue = currentValue.replace(/^\s+|\s+$/g,""); //"trim" kludge

  if (currentValue.length == 0)
  {
    // Set a column to show when data was deleted
    SpreadsheetApp.getActiveSheet().getRange(DeletedColNote + rowIndex).setValue("Deleted: " + curDate);
  }
  else
  {
    // Set a column to show last edit date
    SpreadsheetApp.getActiveSheet().getRange(DateCol + rowIndex).setValue("Edited: " + curDate);
    SpreadsheetApp.getActiveSheet().getRange(DeletedColNote + rowIndex).setValue("");
  }
}

решение2

К сожалению, VBA не портируется в Google Таблицы, но если отказаться от требований Google Таблиц, то это довольно просто сделать с помощью VBA.

Присоедините этот код к событию WorkSheet_Change для интересующего вас рабочего листа...

Private Sub Worksheet_Change(ByVal Target As Range)
Dim RngToMark As Range
' define the range you want to track changes for
    Set RngToMark = ActiveSheet.Range("A1:G30")
' make sure the change occurred inside the range
    If Intersect(Target, RngToMark) Is Nothing Then Exit Sub
' ignore deleting the contents
    If Target.Value = "" Then Exit Sub
' mark the row as changed
    ActiveSheet.Range("K" & Target.Row).Value = Format(Now(), "MMM-DD-YYYY")

End Sub

Чтобы попасть в правильное место для вставки этого ...

  1. В VBEditor дважды щелкните имя листа в разделе «Объекты Microsoft Excel».
  2. Затем выберите Рабочий лист в раскрывающемся списке слева.
  3. Затем выберите Изменить в раскрывающемся списке справа.

Связанный контент