#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
}
}
}