谷歌工作表-在单元格仍然打开时启动宏



我还是Google Sheets的新手,在此之前我大多只是用VBA编程。

我正在做的项目是一个D&D型游戏,DM将使用Sheet记录怪物受到的伤害。基本上DM键入伤害,点击计算按钮,然后代码将当前伤害汇总为坏蛋。

代码运行良好。我遇到的问题是人的问题。在关闭单元格之前,通常会单击"计算"按钮。

例如,DM在单元格中键入31,并在点击回车键之前立即单击"计算"。这样就无法正确记录损坏情况,我也无法找出先关闭电池的代码。

这是我当前的代码:

function DamageRecordEnemy1Copy1() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A1').activate();
var DamageLocation = spreadsheet.getRange('Q4');
var DamageLogLocation = spreadsheet.getRange('Q5');
var DamageLocationValue = DamageLocation.getValue();
var DamageLogLocationValue = DamageLogLocation.getValue();
var NewDamage = DamageLocationValue + DamageLogLocationValue;
DamageLocation.activate();
spreadsheet.getCurrentCell().setValue(NewDamage);
DamageLogLocation.activate();
spreadsheet.getCurrentCell().setValue("");
spreadsheet.getRange('A1').activate();
}

知道如何解决这个问题吗?非常感谢!

感谢大家的帮助,以下是我最终所做的:

function onEdit(e){
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = e.range;
var DamageLocation = spreadsheet.getRange('Q4');
var DamageLogLocation = spreadsheet.getRange('Q5');
var DamageLocationValue = DamageLocation.getValue()
var DamageLogLocationValue = DamageLogLocation.getValue()
var allRows = [5];
var allColumns = [17, 20, 23, 26, 29, 32];
var EditRow = range.getRow()
var EditColumn = range.getColumn()
if (allColumns.indexOf(EditColumn)  > -1)
{
if (allRows.indexOf(EditRow)  > -1)
{
var BadDamage = spreadsheet.getRange(EditRow-1,EditColumn)
var BadDamageLog = spreadsheet.getRange(EditRow,EditColumn)
var DamageCalc = BadDamage.getValue() + BadDamageLog.getValue()
BadDamage.setValue(DamageCalc);
BadDamageLog.setValue("");   
}
}  
};

将"button"替换为insert->复选框,然后使用OnEdit函数检查该单元格是否设置为true,执行按钮代码并将其设置回false。之所以这样做,是因为图形在自己的图层上,但复选框会强制它们具有"点击-输入"行为。

最新更新