Google Apps Script, Benachrichtigung bei Zellwerterhöhung in gleicher Zelle
Hallo!
Ich bin gerade dabei ein Script zu schreiben, welches mir eine Email schickt, wenn Werte in Zellen geändert werden.
Ich habe das jetzt funktionierend soweit, dass ich eine Email bekomme, wenn ein Zellwert unter 90 (oder 100 oder was man eben der Funktion beibringt) sinkt.
Doch soll das Ganze eigentlich nicht an einen speziellen Wert gekoppelt sein.
Also z.B. B2 hat einen Wert. Dieser Wert ändert sich durch eine Usereingabe (wird entweder höher oder niedriger). Und ich möchte eine email erhalten, wenn B2 kleiner wird.
Also meinetwegen
Dass das so nicht funktioniert, ist mir klar. Aber wie bekomme ich hin, dass erst der Wert gelesen wird und wenn sich dieser Wert dann ändert (durch die Usereingabe), bekomme ich eine Email. Es muss also der Wert mit sich selbst verglichen werden. Muss das irgendwie über globale Variablen gelöst werden?
Ich bin gerade dabei ein Script zu schreiben, welches mir eine Email schickt, wenn Werte in Zellen geändert werden.
Ich habe das jetzt funktionierend soweit, dass ich eine Email bekomme, wenn ein Zellwert unter 90 (oder 100 oder was man eben der Funktion beibringt) sinkt.
Doch soll das Ganze eigentlich nicht an einen speziellen Wert gekoppelt sein.
Also z.B. B2 hat einen Wert. Dieser Wert ändert sich durch eine Usereingabe (wird entweder höher oder niedriger). Und ich möchte eine email erhalten, wenn B2 kleiner wird.
Also meinetwegen
var test1 = sheet.getRange("B2").getValue();
var test2 = sheet.getRange("B2").getValue();
If(test1 < test2)
{
Dass das so nicht funktioniert, ist mir klar. Aber wie bekomme ich hin, dass erst der Wert gelesen wird und wenn sich dieser Wert dann ändert (durch die Usereingabe), bekomme ich eine Email. Es muss also der Wert mit sich selbst verglichen werden. Muss das irgendwie über globale Variablen gelöst werden?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 321639
Url: https://administrator.de/contentid/321639
Ausgedruckt am: 19.11.2024 um 12:11 Uhr
19 Kommentare
Neuester Kommentar
Speichere den vorherigen Wert einfach in einer weiteren "Backup" Zelle und mach damit den Vergleich ...
Gruß
function OnEdit(e){
var sheet = SpreadsheetApp.getActiveSheet();
var cellBackup = sheet.getRange("ZZ1");
if (e.range.getRow() == 2 && e.range.getColumn() == 2){
if (e.range.getValue() < cellBackup.getValue() || cellBackup.getValue() == ''){
//send mail
MailApp.sendEmail('user@domain.de','Cell changed','Cell changed to value ' + e.range.getValue());
}
cellBackup.setValue(e.range.getValue());
}
}
Falsch, diese Zelle in Zeile 3 ist eine frei wählbare Backupzelle in der der vorherige Wert beim Ändern zwischengespeichert wird.
Die Zelle die abgefragt wird wird über
festgelegt.
Die Zelle die abgefragt wird wird über
if (e.range.getRow() == 2 && e.range.getColumn() == 2)
festgelegt.
Funktioniert die function bei dir so?
Ja, selbstredend, sonst würde ich sie hier nicht veröffentlichen.Zitat von @Stoffn:
Ahja ich verstehe. Wenn ich also E10 z.B. nutzen wollen würde, müsste ich
if (e.range.getRow() == 10 && e.range.getColumn() == 5) setzen?
Correctamente. Die Abfrage ist einfach dafür da das die Überprüfung nur dann stattfindet wenn wirklich nur deine "bestimmte" Zelle geändert wird.Ahja ich verstehe. Wenn ich also E10 z.B. nutzen wollen würde, müsste ich
if (e.range.getRow() == 10 && e.range.getColumn() == 5) setzen?
In dem Fall so:
function OnEdit(e){
var sheet = SpreadsheetApp.getActiveSheet();
var cellBackup = sheet.getRange("ZZ1");
var cellCheck = sheet.getRange("B2");
if (cellCheck.getValue() < cellBackup.getValue() || cellBackup.getValue() == ''){
//send mail
MailApp.sendEmail('user@domain.de','Cell changed','Cell changed to value ' + cellCheck.getValue());
}
cellBackup.setValue(cellCheck.getValue());
}
Geht nich. Dann bau Trigger in die anderen Sheets ein, die die Überprüfung in Sheet1 triggern.
Zitat von @Stoffn:
Also ich meine kein 2. neues Sheet, sondern nur ein neues Tabellenblatt, praktisch also ein neuer Tab. Dort gibt es Berechnungen, die B2 beeinflussen.
Ach so, na dann kein ProblemAlso ich meine kein 2. neues Sheet, sondern nur ein neues Tabellenblatt, praktisch also ein neuer Tab. Dort gibt es Berechnungen, die B2 beeinflussen.
Man kann der Funktion also nicht mitgeben, dass nur ein bestimmtes Tabellenblatt (also Sheet1) betrachtet wird, auch wenn in Sheet2 dann onEdit getriggert wird?
Doch, wenn du dir mal die Doku angesehen hättest, hättest du es auch selbst gefundengetSheetByName(name)
function myFunction(e){
var sheet = e.source.getSheetByName("Tabellenblatt1");
var cellBackup = sheet.getRange("D2");
var cellCheck = sheet.getRange("B2");
if (cellCheck.getValue() < cellBackup.getValue() || cellBackup.getValue() == ''){
//send mail
MailApp.sendEmail('user@domain.de','Cell changed','Cell changed to value ' + cellCheck.getValue());
}
cellBackup.setValue(cellCheck.getValue());
}
p.s. Das nächste mal diese ganzen Infos direkt in den ersten Thread rein schreiben!! DANKE.
Zitat von @Stoffn:
Ja getSheetbyName habe ich bereits probiert. Brachte mir keinen Erfolg. Vermutlich ist aber einfach noch irgendwo was falsch.
Geht hier ohne Probleme, da wirst du einfach noch einen Fehler eingebaut haben.Ja getSheetbyName habe ich bereits probiert. Brachte mir keinen Erfolg. Vermutlich ist aber einfach noch irgendwo was falsch.
Doch genau so habe ich dich schon verstanden, und es geht trotzdem zu 100% !!!
Der Trigger gilt für die ganze Arbeitsmappe.
Kann dir gerne das File zur Verfügung stellen.
Der Trigger gilt für die ganze Arbeitsmappe.
Kann dir gerne das File zur Verfügung stellen.
Ich habs jetzt über einen Zeittrigger gesteuert.
Sehr ineffizient und unnötig.
Na dann fehlt hier ja jetzt nur noch ein "Gelöst".
Oder kommt hier jetzt noch ne Pizza-Bestellung mit rein
Oder kommt hier jetzt noch ne Pizza-Bestellung mit rein
Ist halt kein Excel.
Für zuverlässige Sachen nimmt man Datenbanken mit Triggern.
Für zuverlässige Sachen nimmt man Datenbanken mit Triggern.