Как можно программно создать триггер, который будет запускать макрос при изменении конкретной ячейки на определённом листе?

Здравствуйте всем. У меня есть задача: мне нужно настроить триггер, который будет автоматически срабатывать при изменении ячейки "A1" на "Sheet1". Этот триггер должен запускать макрос, добавляющий строку сверху. Цель этого изменения — чтобы при заполнении реестра счетов новые счета добавлялись сверху, а старые опускались вниз, чтобы улучшить порядок. Это очень важно для меня, и я надеюсь на вашу помощь. <br/> Вот код моего макроса для добавления строки сверху: <br/> <br/> function macro_1() { <br/> var spreadsheet = SpreadsheetApp.getActive(); <br/> spreadsheet.getRange('2:2').activate(); <br/> spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1); <br/> spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate(); <br/> };
  • 22 ноября 2024 г. 14:23
Ответы на вопрос 2
Для создания триггера, который будет запускать макрос при изменении конкретной ячейки ("A1") на определенном листе ("Sheet1"), вам нужно сделать следующее:

1. Вам нужно заменить ваш текущий макрос на функцию, которая будет работать в связке с триггерами.
2. Создать функцию, которая будет проверять, изменилось ли значение в ячейке "A1" на листе "Sheet1".
3. Использовать триггер "onEdit", который срабатывает каждый раз при редактировании таблицы.

Вот пример кода, который выполняет эту задачу:

```javascript
function onEdit(e) {
  // Получаем информацию о событии редактирования
  var range = e.range;
  var sheet = range.getSheet();
  
  // Проверяем, изменена ли ячейка "A1" на листе "Sheet1"
  if (sheet.getName() === "Sheet1" && range.getA1Notation() === "A1") {
    addRowAbove(); // Вызываем функцию для добавления строки
  }
}

function addRowAbove() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  // Добавляем строку перед второй строкой
  sheet.insertRowBefore(2);
}
```

### Пошаговое руководство

1. Откройте Google Sheets и перейдите в `Расширения` -> `Apps Script`.
2. Удалите весь существующий код в редакторе и вставьте приведенный выше код.
3. Нажмите на значок диска, чтобы сохранить проект.
4. Теперь, если вы измените значение в ячейке "A1" на листе "Sheet1", будет вызвана функция `addRowAbove`, которая добавит новую строку перед второй строкой.

### Заметки:
- Не забудьте проверить, что ваш триггер работает. Вы можете изменить ячейку "A1", чтобы убедиться, что строка добавляется.
- Этот триггер будет работать только для редактирования вручную; если вы программно изменяете значение ячейки "A1", триггер "onEdit" не сработает.
Только я раз 10 этот код скидывал здесь. 
/**
 * Возникает при изменении ячейки
* @param {e} event event-объект https://developers.google.com/apps-script/guides/triggers/events?hl=ru
 * [ ProgrammerForever (c) 2020 ]
 * @return Не возвращает значений
 */
function onEdit(event) {
  var sheet = event.source.getActiveSheet();//Текущий лист
  var address = event.range.getA1Notation().toUpperCase();//Адрес ячейки
  var row = event.range.getRow();      //Номер строки
  var col = event.range.getColumn();  //Номер столбца
  var newValue = event.value;            //Новое значение
  var oldValue = event.oldValue;        //Старое значение
  var userEmail = event.user.getEmail();//Пользователь(работает только при вручную назначенном триггере)
  
  if((col===1)&&(row===1)&&(sheet.getName==="Sheet1")){
    // Что-то делаем
  };
};
Похожие вопросы