Как соединить два макроса в 1-ин в гугл- таблицах? Так, что бы одна из команд общего макроса работала в другой гугл-книге и брала данные из первой. - вопрос №5047590

Здравствуйте. Нужна помощь. Есть гугл таблица с кнопками, на которые записан макрос для изменения цвета ячейки под кнопкой (ON — желтый, OF — в зеленый цвет, так же цвет меняется и на первом листе). В этот макрос нужно прописать команду, которая позволит из имеющейся таблицы с кнопками переносить данные ячейки С3 в другую таблицу (при нажатии на кнопку ON — данные С3 появляются в другой таблице и окрашиваются в желтый, при нажатии на кнопку OF — в серый цвет). Т.е нужно соединить два макроса в 1-ин. Как это можно сделать? Подскажите пожалуйста. Таблица с кнопками — docs.google.com/spreadsheets/d/1rpzquekGqamTkjvR_6yXr6SgiVCu3M3bgTYSs10Iwe0/edit#gid=2073924395. Другая таблица — docs.google.com/spreadsheets/d/1ILWKgP2MRgAFDg7MRU6xeRYVBmYOcE0LmyHLnp7V17w/edit#gid=747610966

Ответы

Для того чтобы объединить два макроса в один, нужно внести несколько изменений в код:

  1. В начале кода необходимо добавить функцию getSheet() для получения ссылки на лист с кнопками в первой таблице:
 
  • <span class="hljs-function">function <span class="hljs-title">getSheet</span>()</span> { <span class="hljs-keyword">return</span> SpreadsheetApp.getActiveSpreadsheet().getSheetByName(<span class="hljs-string">'Название листа с кнопками'</span>); }

Вместо «Название листа с кнопками» нужно указать наименование листа, на котором находятся кнопки.

  1. Добавляем команду openById() для открытия другой таблицы:
  • var targetSpreadsheet = SpreadsheetApp.openById('ID целевой таблицы'); var targetSheet = targetSpreadsheet.getSheetByName('Название листа в целевой таблице');

Вместо «ID целевой таблицы» нужно указать идентификатор целевой таблицы, а вместо «Название листа в целевой таблице» — наименование листа, на который нужно отправлять данные.

  1. В теле макроса changeColor() нужно добавить код для отправки данных на другой лист:
  • function changeColor(range) { var sheet = getSheet(); var targetSpreadsheet = SpreadsheetApp.openById('ID целевой таблицы');
  • var targetSheet = targetSpreadsheet.getSheetByName('Название листа в целевой таблице');
  • var cellValue = sheet.getRange(«C3»).getValue(); if (range.getValue() == «ON») { range.setBackground(«yellow»); sheet.getRange(«C3»).setBackground(«yellow»); targetSheet.appendRow([cellValue]); targetSheet.getRange(targetSheet.getLastRow(), 1, 1, 1).setBackground(«yellow»); } else { range.setBackground(«green»); sheet.getRange(«C3»).setBackground(«gray»); targetSheet.appendRow([cellValue]); targetSheet.getRange(targetSheet.getLastRow(), 1, 1, 1).setBackground(«gray»); } }

Когда пользователь нажимает на кнопку, макрос changeColor() выполняет следующие действия:

  1. Получает ссылку на лист с кнопками и данные ячейки С3.

  2. Открывает целевую таблицу и находит нужный лист.

  3. Если пользователь нажал на кнопку «ON», то данные ячейки С3 отправляются на целевой лист и окрашиваются в желтый цвет. Если пользователь нажал на кнопку «OF», то данные ячейки С3 также отправляются на целевой лист, но окрашиваются в серый цвет.

  4. Макрос изменяет цвет фона кнопки и ячейки С3 в зависимости от того, какую кнопку нажал пользователь

27.03.23

Еva

Читать ответы
Посмотреть всех экспертов из раздела Учеба и наука > Информатика
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store