Запуск макроса с помощью checkbox в Google таблицах

#google-apps-script #google-sheets

#google-apps-script #google-sheets

Вопрос:

Я довольно новичок в Google таблицах, поэтому заранее приношу извинения, если это кажется слишком простым. Мой макрос, похоже, отлично работал на компьютерах, я назначил его кнопке «форма», но, поскольку он также должен быть функциональным на ipad, я искал об этом, и найденный ответ заключался в том, чтобы использовать триггер onEdit (e) и использовать флажок для его настройки. Моя проблема сейчас в том, что нет кнопки назначить, чтобы макрос был привязан к флажку, когда он установлен:’)

У меня нет проблем с совместным использованием скрипта, если это необходимо, потому что он очень простой.

Комментарии:

1. onEdit фиксирует все ручные изменения, которые вы выполняете на листе, и onEdit функция запускается. Вам не нужна никакая кнопка для выполнения макроса, если вы решите использовать onEdit . Можете ли вы показать, что пытается сделать ваш макрос?

2. Я предполагаю, что при ручном редактировании будет установлен флажок. Что делает макрос, так это дублирует лист в новом, затем past_values, чтобы формул там больше не было, и удаляет предыдущие листы с данными, которые использовались для заполнения этого последнего. Я вставлю его сюда через секунду @NaziA

3. Можете ли вы показать макрос вместо этого? Возможно, я что-то пропустил.

4. codepile.net/pile/VLoXo1Eo @NaziA пока что это макрос

5. Я предоставил ответ ниже. Пожалуйста, проверьте

Ответ №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
    }
  }
}