
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 ...
- No VBEditor, clique duas vezes no nome da planilha em “Microsoft Excel Objects”
- Em seguida, escolha Planilha no menu suspenso à esquerda
- Em seguida, escolha Alterar no menu suspenso à direita