【问题标题】:Getting a macro to run using checkbox in google sheets使用谷歌表格中的复选框运行宏
【发布时间】:2021-02-06 01:17:00
【问题描述】:

我对谷歌表格还很陌生,所以如果这看起来太基本了,我提前道歉。 我的宏似乎在计算机上运行良好,我将它分配给一个“形状”按钮,但由于它也需要在 ipad 上运行,我搜索了它并找到的答案是使用 onEdit(e) 触发器并使用复选框设置它。 我现在的问题是,当它被选中时,没有分配按钮将宏归因于复选框:')

如果需要,我可以共享脚本,因为它非常简单。

【问题讨论】:

  • onEdit 捕获您在工作表上所做的任何手动编辑,并触发 onEdit 函数。如果您决定使用onEdit,则不需要任何按钮来执行宏。你能展示你的宏试图做什么吗?
  • 我猜手动编辑会选中复选框。宏所做的是将工作表复制到新的工作表中,然后复制过去的值,因此公式将不再存在,并使用用于填充最后一个工作表的数据删除以前的工作表。我会在几秒钟内把它贴在这里@NaziA
  • 你能显示宏吗?我可能会错过一些东西。
  • codepile.net/pile/VLoXo1Eo @NaziA 这是目前为止的宏
  • 我在下面提供了答案。请检查

标签: google-apps-script google-sheets


【解决方案1】:

鉴于代码有效,CarlosM 提供的答案几乎是正确的。

我只需要把它和你的宏结合起来

代码:

function onEdit(e) {
  // Update if your checkBox is located somewhere else
  var checkBoxLocation = "A1";
  // Change to false if you want to run the macro when checkBox is unticked
  var checkBoxCondition = true;
  // Since getA1Notation and getValue are both methods
  // We need to add () for them to work
  if (e.range.getA1Notation() == checkBoxLocation) {
    if (e.range.getValue() == checkBoxCondition) {
      var spreadsheet = SpreadsheetApp.getActive();
      spreadsheet.getRange('D2').activate();
      spreadsheet.duplicateActiveSheet();
      spreadsheet.getActiveSheet().setName('Estimate ');
      spreadsheet.getActiveSheet().setFrozenRows(0);

      var sheet = spreadsheet.getActiveSheet();
      sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).activate();
      sheet = spreadsheet.getActiveSheet();
      sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);

      spreadsheet.getRange('E7').activate();
      spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Clients List'), true);
      spreadsheet.deleteActiveSheet();
      spreadsheet.deleteActiveSheet();
      spreadsheet.getRange('A39:H39').activate();
    }
  }
}

如果满足条件,上面的代码会执行您的宏。这些条件是:

  • 复选框位置位于变量checkBoxLocation
  • 复选框已勾选,这将执行您的宏

要快速检查脚本逻辑的行为,请尝试这个。在尝试代码之前,请确保在 A1 中有一个复选框。

测试代码:

function onEdit(e) {
  var checkBoxLocation = "A1";
  var checkBoxCondition = true;
  if (e.range.getA1Notation() == checkBoxLocation) {
    var spreadsheet = SpreadsheetApp.getActive();
    var cell = spreadsheet.getRange('D2');
    if (e.range.getValue() == checkBoxCondition) {
      cell.setValue("A1 checkbox is ticked");
    }
    else {
      cell.setValue("A1 checkbox is unticked");
    }
  }
}

【讨论】:

    【解决方案2】:

    复选框只是单元格中的 True 或 False 值,选中/取消选中它会触发 onEdit(e) 函数。您只需要检查复选框的位置以及执行宏的值。

    示例:

    function onEdit(e) {
      if (e.range.getA1Notation == "A1") {
        if (e.range.getValue == true) {
          // execute something
        } 
        else {
          // execute something else
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      相关资源
      最近更新 更多