Carimbo de data ao editar linhas na planilha

Carimbo de data ao editar linhas na planilha

Eu tenho uma planilha que precisa de carimbo de data para cada linha assim que houver alterações nas células dessa linha. Por exemplo, mudo algo na célula B14 ou E14 ou G14 e a data de hoje aparece em K14. Obviamente, preciso poder escolher o intervalo de linhas e colunas que serão afetadas.

No entanto, o complicado no meu caso é que preciso que a data de hoje apareçaAPENASquando euadicionaroumudarinformações na célula. Se eu apenasexcluirinformações da célula, preciso que a data permaneça a mesma de antes de excluir as informações.

PS O arquivo é uma planilha Excel, mas será usado no Google Drive.

Responder1

Esta resposta é se você for direto para uma Planilha Google.

Acho que isso ajudará você a seguir na direção certa. Não estou claro se você está dizendo que os campos que você monitorará estão espalhados pela planilha ou se as células não adjacentes que você referenciou eram apenas exemplos dentro de um intervalo. Se você tiver células espalhadas, provavelmente terá que criar vários "intervalos de observação", como observei no código, e verificar se a célula que está sendo editada está dentro de pelo menos um intervalo, caso contrário, retorne para fora da função.

Quero observar que não me esforcei muito para fazer com que isso funcionasse para oferecer suporte à exclusão de todos os valores de um intervalo de várias células.

Além disso, observe que você terá que ir em Ferramentas -> Editor de scripts dentro da Planilha Google e, em seguida, Recursos -> Gatilhos (o menu pode ser diferente dependendo do que você fez lá antes) e adicionar um gatilho "onEdit ()" para a Folha.

Então, sua função será mais ou menos assim

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("");
  }
}

Responder2

Infelizmente, o VBA não é portado para o Planilhas Google, mas se o requisito do Planilhas Google for dispensado, é bastante simples fazer isso com o VBA.

Anexe este código ao evento WorkSheet_Change da planilha de interesse...

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

Para chegar ao local correto para inserir isso ...

  1. No VBEditor, clique duas vezes no nome da planilha em “Microsoft Excel Objects”
  2. Em seguida, escolha Planilha no menu suspenso à esquerda
  3. Em seguida, escolha Alterar no menu suspenso à direita

informação relacionada