Очистка ячеек строки при изменении одной конкретной ячейки.
Dimansh
Дата: Четверг, 20.04.2017, 00:37 |
Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 53
Репутация:
0
±
Замечаний:
0% ±
Google Docs
Есть два скрипта. работают уже год, благодаря этому форуму: [vba]Код
function onOpen() { var sheet = SpreadsheetApp.getActiveSpreadsheet(); var entries = [{name : "Очистить",functionName : "Clear"}]; sheet.addMenu("Скрипты", entries); }; function Clear() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('таблица'); sheet.setActiveSelection("I1:AK1").clearContent(); }
[/vba] и [vba]Код
function onEdit(e) { var sheetToWatch= 'таблица', columnToWatch = 5, columnToStamp = 6; //change all of these to your needs if (e.range.columnStart !== columnToWatch || e.source.getActiveSheet().getName() !== sheetToWatch || !e.value) return; e.source.getActiveSheet() .getRange(e.range.rowStart, columnToStamp) .setValue(new Date()); }
[/vba] Возникла необходимость операции, при которой, например, при изменении ячейки E5, - скрипт стирал все, что находится в диапазоне I5:AK5 и делал это в каждой строке. Интуитивно понимаю, что это будет комбинация указанных 2 скриптов, но как и что - не пойму. Спасибо заранее.
Есть два скрипта. работают уже год, благодаря этому форуму: [vba]Код
function onOpen() { var sheet = SpreadsheetApp.getActiveSpreadsheet(); var entries = [{name : "Очистить",functionName : "Clear"}]; sheet.addMenu("Скрипты", entries); }; function Clear() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('таблица'); sheet.setActiveSelection("I1:AK1").clearContent(); }
[/vba] и [vba]Код
function onEdit(e) { var sheetToWatch= 'таблица', columnToWatch = 5, columnToStamp = 6; //change all of these to your needs if (e.range.columnStart !== columnToWatch || e.source.getActiveSheet().getName() !== sheetToWatch || !e.value) return; e.source.getActiveSheet() .getRange(e.range.rowStart, columnToStamp) .setValue(new Date()); }
[/vba] Возникла необходимость операции, при которой, например, при изменении ячейки E5, - скрипт стирал все, что находится в диапазоне I5:AK5 и делал это в каждой строке. Интуитивно понимаю, что это будет комбинация указанных 2 скриптов, но как и что - не пойму. Спасибо заранее. Dimansh
Сообщение отредактировал Dimansh - Четверг, 20.04.2017, 00:44
Ответить
Сообщение Есть два скрипта. работают уже год, благодаря этому форуму: [vba]Код
function onOpen() { var sheet = SpreadsheetApp.getActiveSpreadsheet(); var entries = [{name : "Очистить",functionName : "Clear"}]; sheet.addMenu("Скрипты", entries); }; function Clear() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('таблица'); sheet.setActiveSelection("I1:AK1").clearContent(); }
[/vba] и [vba]Код
function onEdit(e) { var sheetToWatch= 'таблица', columnToWatch = 5, columnToStamp = 6; //change all of these to your needs if (e.range.columnStart !== columnToWatch || e.source.getActiveSheet().getName() !== sheetToWatch || !e.value) return; e.source.getActiveSheet() .getRange(e.range.rowStart, columnToStamp) .setValue(new Date()); }
[/vba] Возникла необходимость операции, при которой, например, при изменении ячейки E5, - скрипт стирал все, что находится в диапазоне I5:AK5 и делал это в каждой строке. Интуитивно понимаю, что это будет комбинация указанных 2 скриптов, но как и что - не пойму. Спасибо заранее. Автор - Dimansh Дата добавления - 20.04.2017 в 00:37
Gustav
Дата: Четверг, 20.04.2017, 15:44 |
Сообщение № 2
Группа: Админы
Ранг: Участник клуба
Сообщений: 2808
Репутация:
1184
±
Замечаний:
±
начинал с Excel 4.0, видел 2.1
Можно дописать в конец onEdit несколько операторов: [vba]Код
function onEdit(e) { // существующая часть процедуры // бла-бла-бла // новая часть процедуры var sheet = e.range.getSheet(); if (e.range.getColumn() == columnToWatch && e.range.getNumColumns() == 1 && sheet.getName() == sheetToWatch) { e.range.offset(0, sheet.getRange("I:AK").getColumn() - columnToWatch, e.range.getNumRows(), sheet.getRange("I:AK").getNumColumns() ).clearContent(); } }
[/vba]
Можно дописать в конец onEdit несколько операторов: [vba]Код
function onEdit(e) { // существующая часть процедуры // бла-бла-бла // новая часть процедуры var sheet = e.range.getSheet(); if (e.range.getColumn() == columnToWatch && e.range.getNumColumns() == 1 && sheet.getName() == sheetToWatch) { e.range.offset(0, sheet.getRange("I:AK").getColumn() - columnToWatch, e.range.getNumRows(), sheet.getRange("I:AK").getNumColumns() ).clearContent(); } }
[/vba] Gustav
МОИ: Ник , Tip box: 41001663842605
Сообщение отредактировал Gustav - Четверг, 20.04.2017, 15:47
Ответить
Сообщение Можно дописать в конец onEdit несколько операторов: [vba]Код
function onEdit(e) { // существующая часть процедуры // бла-бла-бла // новая часть процедуры var sheet = e.range.getSheet(); if (e.range.getColumn() == columnToWatch && e.range.getNumColumns() == 1 && sheet.getName() == sheetToWatch) { e.range.offset(0, sheet.getRange("I:AK").getColumn() - columnToWatch, e.range.getNumRows(), sheet.getRange("I:AK").getNumColumns() ).clearContent(); } }
[/vba] Автор - Gustav Дата добавления - 20.04.2017 в 15:44
Dimansh
Дата: Четверг, 20.04.2017, 19:12 |
Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 53
Репутация:
0
±
Замечаний:
0% ±
Google Docs
дописал и сохранил. самую нижнюю скобочку приняло за ошибку - убрал и дало сохранить. при работе в документе : при изменении ячейки Е5 ничего не происходит. А при попытке в редакторе скриптов проиграть сам скрипт ругается ReferenceError: Объект "e" не определен. (line 16, file "Код") на строку: [vba]Код
var sheet = e.range.getSheet();
[/vba]
дописал и сохранил. самую нижнюю скобочку приняло за ошибку - убрал и дало сохранить. при работе в документе : при изменении ячейки Е5 ничего не происходит. А при попытке в редакторе скриптов проиграть сам скрипт ругается ReferenceError: Объект "e" не определен. (line 16, file "Код") на строку: [vba]Код
var sheet = e.range.getSheet();
[/vba]Dimansh
Ответить
Сообщение дописал и сохранил. самую нижнюю скобочку приняло за ошибку - убрал и дало сохранить. при работе в документе : при изменении ячейки Е5 ничего не происходит. А при попытке в редакторе скриптов проиграть сам скрипт ругается ReferenceError: Объект "e" не определен. (line 16, file "Код") на строку: [vba]Код
var sheet = e.range.getSheet();
[/vba]Автор - Dimansh Дата добавления - 20.04.2017 в 19:12
Gustav
Дата: Четверг, 20.04.2017, 20:28 |
Сообщение № 4
Группа: Админы
Ранг: Участник клуба
Сообщений: 2808
Репутация:
1184
±
Замечаний:
±
начинал с Excel 4.0, видел 2.1
дописал и сохранил. самую нижнюю скобочку приняло за ошибку
Точно? А можно посмотреть весь текст функции, который у Вас в итоге получился?А при попытке в редакторе скриптов проиграть сам скрипт ругается
Всё правильно. Это же триггер, его так просто не проиграть, он срабатывает в ответ на событие.
дописал и сохранил. самую нижнюю скобочку приняло за ошибку
Точно? А можно посмотреть весь текст функции, который у Вас в итоге получился?А при попытке в редакторе скриптов проиграть сам скрипт ругается
Всё правильно. Это же триггер, его так просто не проиграть, он срабатывает в ответ на событие.Gustav
МОИ: Ник , Tip box: 41001663842605
Ответить
Сообщение дописал и сохранил. самую нижнюю скобочку приняло за ошибку
Точно? А можно посмотреть весь текст функции, который у Вас в итоге получился?А при попытке в редакторе скриптов проиграть сам скрипт ругается
Всё правильно. Это же триггер, его так просто не проиграть, он срабатывает в ответ на событие.Автор - Gustav Дата добавления - 20.04.2017 в 20:28
Dimansh
Дата: Четверг, 20.04.2017, 20:53 |
Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 53
Репутация:
0
±
Замечаний:
0% ±
Google Docs
А можно посмотреть весь текст функции
[vba]Код
function onEdit(e) { var sheetToWatch= 'Сводная таблица', columnToWatch = 5, columnToStamp = 6; //change all of these to your needs if (e.range.columnStart !== columnToWatch || e.source.getActiveSheet().getName() !== sheetToWatch || !e.value) return; e.source.getActiveSheet() .getRange(e.range.rowStart, columnToStamp) .setValue(new Date()); } // новая часть процедуры var sheet = e.range.getSheet(); if (e.range.getColumn() == columnToWatch && e.range.getNumColumns() == 1 && sheet.getName() == sheetToWatch) { e.range.offset(0, sheet.getRange("I:AK").getColumn() - columnToWatch, e.range.getNumRows(), sheet.getRange("I:AK").getNumColumns() ).clearContent(); }
[/vba]
А можно посмотреть весь текст функции
[vba]Код
function onEdit(e) { var sheetToWatch= 'Сводная таблица', columnToWatch = 5, columnToStamp = 6; //change all of these to your needs if (e.range.columnStart !== columnToWatch || e.source.getActiveSheet().getName() !== sheetToWatch || !e.value) return; e.source.getActiveSheet() .getRange(e.range.rowStart, columnToStamp) .setValue(new Date()); } // новая часть процедуры var sheet = e.range.getSheet(); if (e.range.getColumn() == columnToWatch && e.range.getNumColumns() == 1 && sheet.getName() == sheetToWatch) { e.range.offset(0, sheet.getRange("I:AK").getColumn() - columnToWatch, e.range.getNumRows(), sheet.getRange("I:AK").getNumColumns() ).clearContent(); }
[/vba]Dimansh
Сообщение отредактировал Dimansh - Четверг, 20.04.2017, 20:56
Ответить
Сообщение А можно посмотреть весь текст функции
[vba]Код
function onEdit(e) { var sheetToWatch= 'Сводная таблица', columnToWatch = 5, columnToStamp = 6; //change all of these to your needs if (e.range.columnStart !== columnToWatch || e.source.getActiveSheet().getName() !== sheetToWatch || !e.value) return; e.source.getActiveSheet() .getRange(e.range.rowStart, columnToStamp) .setValue(new Date()); } // новая часть процедуры var sheet = e.range.getSheet(); if (e.range.getColumn() == columnToWatch && e.range.getNumColumns() == 1 && sheet.getName() == sheetToWatch) { e.range.offset(0, sheet.getRange("I:AK").getColumn() - columnToWatch, e.range.getNumRows(), sheet.getRange("I:AK").getNumColumns() ).clearContent(); }
[/vba]Автор - Dimansh Дата добавления - 20.04.2017 в 20:53
Gustav
Дата: Четверг, 20.04.2017, 23:54 |
Сообщение № 6
Группа: Админы
Ранг: Участник клуба
Сообщений: 2808
Репутация:
1184
±
Замечаний:
±
начинал с Excel 4.0, видел 2.1
Ну, примерно это я и предполагал... Восстанавливайте мою заключительную фигурную скобку и убирайте свою после setValue в этом фрагменте: [vba]Код
.setValue(new Date()); }
[/vba]У Вас сейчас мои добавления находятся за пределами функции onEdit. Сделайте как говорю и будет счастье.
Ну, примерно это я и предполагал... Восстанавливайте мою заключительную фигурную скобку и убирайте свою после setValue в этом фрагменте: [vba]Код
.setValue(new Date()); }
[/vba]У Вас сейчас мои добавления находятся за пределами функции onEdit. Сделайте как говорю и будет счастье. Gustav
МОИ: Ник , Tip box: 41001663842605
Ответить
Сообщение Ну, примерно это я и предполагал... Восстанавливайте мою заключительную фигурную скобку и убирайте свою после setValue в этом фрагменте: [vba]Код
.setValue(new Date()); }
[/vba]У Вас сейчас мои добавления находятся за пределами функции onEdit. Сделайте как говорю и будет счастье. Автор - Gustav Дата добавления - 20.04.2017 в 23:54
Dimansh
Дата: Пятница, 21.04.2017, 03:59 |
Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 53
Репутация:
0
±
Замечаний:
0% ±
Google Docs
Счастье пришло. только оно было кратковременным. как оказалось - я изначально неправильно поставил вопрос как себе, так и форуму и получил абсолютно то что просил, но не то что требовалось... при изменении ячейки данные в указанном диапазоне стираются, но как показал тестовый запуск - существует необходимость того, чтобы эти данные стирались только в определенных случаях. для примера: данные в диапазоне стираются при написании в ячейке слова УДАЛИТЬ
Счастье пришло. только оно было кратковременным. как оказалось - я изначально неправильно поставил вопрос как себе, так и форуму и получил абсолютно то что просил, но не то что требовалось... при изменении ячейки данные в указанном диапазоне стираются, но как показал тестовый запуск - существует необходимость того, чтобы эти данные стирались только в определенных случаях. для примера: данные в диапазоне стираются при написании в ячейке слова УДАЛИТЬDimansh
Ответить
Сообщение Счастье пришло. только оно было кратковременным. как оказалось - я изначально неправильно поставил вопрос как себе, так и форуму и получил абсолютно то что просил, но не то что требовалось... при изменении ячейки данные в указанном диапазоне стираются, но как показал тестовый запуск - существует необходимость того, чтобы эти данные стирались только в определенных случаях. для примера: данные в диапазоне стираются при написании в ячейке слова УДАЛИТЬАвтор - Dimansh Дата добавления - 21.04.2017 в 03:59
Gustav
Дата: Пятница, 21.04.2017, 12:48 |
Сообщение № 8
Группа: Админы
Ранг: Участник клуба
Сообщений: 2808
Репутация:
1184
±
Замечаний:
±
начинал с Excel 4.0, видел 2.1
данные в диапазоне стираются при написании в ячейке слова УДАЛИТЬ
Добавляем еще одно условие в оператор if. Для этого меняем фрагмент: [vba]Код
if (e.range.getColumn() == columnToWatch && e.range.getNumColumns() == 1 && sheet.getName() == sheetToWatch) {
[/vba] на фрагмент (я сделал переносы строк, поместив каждое условие в отдельной строке): [vba]Код
if (e.range.getColumn() == columnToWatch && e.range.getNumColumns() == 1 && sheet.getName() == sheetToWatch && e.range.getCell(1, 1).getValue() == "УДАЛИТЬ") {
[/vba] Слово "УДАЛИТЬ" должно быть введено в одиночную ячейку как написано в условии - все буквы в верхнем регистре. Если меняется диапазон, состоящий из нескольких ячеек ("в один столбик"), например, копированием, то слово "УДАЛИТЬ" достаточно указать в первой (верхней) ячейке диапазона, чтобы очищение произошло во всех остальных строках этого диапазона тоже.
данные в диапазоне стираются при написании в ячейке слова УДАЛИТЬ
Добавляем еще одно условие в оператор if. Для этого меняем фрагмент: [vba]Код
if (e.range.getColumn() == columnToWatch && e.range.getNumColumns() == 1 && sheet.getName() == sheetToWatch) {
[/vba] на фрагмент (я сделал переносы строк, поместив каждое условие в отдельной строке): [vba]Код
if (e.range.getColumn() == columnToWatch && e.range.getNumColumns() == 1 && sheet.getName() == sheetToWatch && e.range.getCell(1, 1).getValue() == "УДАЛИТЬ") {
[/vba] Слово "УДАЛИТЬ" должно быть введено в одиночную ячейку как написано в условии - все буквы в верхнем регистре. Если меняется диапазон, состоящий из нескольких ячеек ("в один столбик"), например, копированием, то слово "УДАЛИТЬ" достаточно указать в первой (верхней) ячейке диапазона, чтобы очищение произошло во всех остальных строках этого диапазона тоже.Gustav
МОИ: Ник , Tip box: 41001663842605
Ответить
Сообщение данные в диапазоне стираются при написании в ячейке слова УДАЛИТЬ
Добавляем еще одно условие в оператор if. Для этого меняем фрагмент: [vba]Код
if (e.range.getColumn() == columnToWatch && e.range.getNumColumns() == 1 && sheet.getName() == sheetToWatch) {
[/vba] на фрагмент (я сделал переносы строк, поместив каждое условие в отдельной строке): [vba]Код
if (e.range.getColumn() == columnToWatch && e.range.getNumColumns() == 1 && sheet.getName() == sheetToWatch && e.range.getCell(1, 1).getValue() == "УДАЛИТЬ") {
[/vba] Слово "УДАЛИТЬ" должно быть введено в одиночную ячейку как написано в условии - все буквы в верхнем регистре. Если меняется диапазон, состоящий из нескольких ячеек ("в один столбик"), например, копированием, то слово "УДАЛИТЬ" достаточно указать в первой (верхней) ячейке диапазона, чтобы очищение произошло во всех остальных строках этого диапазона тоже.Автор - Gustav Дата добавления - 21.04.2017 в 12:48