Google 表格 - 在单元格仍处于打开状态时启动宏

Google Sheets - Start Macro while cell is still open

我对 Google Sheet 还是个超级新手,在此之前我基本上只是在 VBA 中编程过。

我正在做的项目是一个 D&D 类型的游戏,其中 DM 将使用 Sheet 来记录对怪物造成的伤害。基本上 DM 键入伤害,点击计算按钮,然后代码总结当前对 baddie 的伤害。

代码完美运行。我遇到的问题是人为问题。在关闭单元格之前,倾向于单击 "calculate" 按钮。

例如,DM 在单元格中键入 31 并在按回车键之前立即单击 "calculate"。这样可以防止损坏被正确记录,我无法弄清楚让单元格先关闭的代码。

这是我当前的代码:

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->checkbox 然后使用 OnEdit 函数检查该单元格是否设置为 true,执行您的按钮代码并将其设置回 false。这将起作用的原因是因为绘图位于它自己的图层上,但复选框将强制它们具有 "hit enter" 行为。