Sello de fecha al editar filas en una hoja de cálculo

Sello de fecha al editar filas en una hoja de cálculo

Tengo una hoja de cálculo que necesita un sello de fecha para cada fila tan pronto como se realicen cambios en las celdas dentro de esa fila. Por ejemplo, cambio algo en la celda B14, E14 o G14 y la fecha de hoy aparece en K14. Obviamente, necesito poder elegir el rango de filas y columnas que se verán afectadas.

Sin embargo, lo complicado en mi caso es que necesito que aparezca la fecha de hoy.SOLOcuando yoagregarocambiarinformación en la celda. si yo soloborrarinformación del celular necesito que la fecha permanezca igual que antes de borrar información.

PD: El archivo es una hoja de cálculo de Excel pero se utilizará en Google Drive.

Respuesta1

Esta respuesta es si vas directamente a una hoja de Google.

Creo que esto le ayudará a avanzar en la dirección correcta. No tengo claro si está diciendo que los campos que monitoreará están esparcidos por la hoja o si las celdas no adyacentes a las que hizo referencia eran solo ejemplos dentro de un rango. Si tiene celdas esparcidas, probablemente tendrá que crear múltiples "rango de vigilancia", como he señalado en el código, y verificar que la celda que se está editando esté dentro de al menos un rango; de lo contrario, saldrá de la función.

Quiero señalar que no me esforcé demasiado para que esto funcionara y admitiera la eliminación de todos los valores de un rango de varias celdas.

Además, tenga en cuenta que tendrá que ir a Herramientas -> Editor de secuencias de comandos dentro de Google Sheet, y luego Recursos -> Activadores (el menú puede ser diferente dependiendo de lo que haya hecho allí antes) y agregar un activador "onEdit()" a la Hoja.

Entonces, tu función será algo como esto

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

Respuesta2

Desafortunadamente, VBA no se adapta a Google Sheets, pero si se elimina el requisito de Google Sheets, es bastante sencillo hacerlo con VBA.

Adjunte este código al evento WorkSheet_Change para la hoja de trabajo de interés...

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 llegar a la ubicación correcta para insertar esto...

  1. En VBEditor, haga doble clic en el nombre de la hoja de trabajo en "Objetos de Microsoft Excel".
  2. Luego seleccione Hoja de trabajo en el menú desplegable de la izquierda.
  3. Luego seleccione Cambiar en el menú desplegable de la derecha.

información relacionada