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" 行为。
我对 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" 行为。