Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Очистка ячеек строки при изменении одной конкретной ячейки. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Мир MS Excel » Вопросы и решения » Excel и другие приложения » Google Docs » Очистка ячеек строки при изменении одной конкретной ячейки. (Формулы/Formulas)
Очистка ячеек строки при изменении одной конкретной ячейки.
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 скриптов, но как и что - не пойму.

Спасибо заранее.


Сообщение отредактировал 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
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2731
Репутация: 1132 ±
Замечаний: 0% ±

начинал с 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]


МОИ: Ник, 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
Дата добавления - 20.04.2017 в 19:12
Gustav Дата: Четверг, 20.04.2017, 20:28 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2731
Репутация: 1132 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
дописал и сохранил. самую нижнюю скобочку приняло за ошибку

Точно? А можно посмотреть весь текст функции, который у Вас в итоге получился?
А при попытке в редакторе скриптов проиграть сам скрипт ругается

Всё правильно. Это же триггер, его так просто не проиграть, он срабатывает в ответ на событие.


МОИ: Ник, 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]


Сообщение отредактировал 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
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2731
Репутация: 1132 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Ну, примерно это я и предполагал... Восстанавливайте мою заключительную фигурную скобку и убирайте свою после setValue в этом фрагменте:
[vba]
Код
    .setValue(new Date());
}
[/vba]У Вас сейчас мои добавления находятся за пределами функции onEdit. Сделайте как говорю и будет счастье.


МОИ: Ник, 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
Дата добавления - 21.04.2017 в 03:59
Gustav Дата: Пятница, 21.04.2017, 12:48 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2731
Репутация: 1132 ±
Замечаний: 0% ±

начинал с 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]
Слово "УДАЛИТЬ" должно быть введено в одиночную ячейку как написано в условии - все буквы в верхнем регистре. Если меняется диапазон, состоящий из нескольких ячеек ("в один столбик"), например, копированием, то слово "УДАЛИТЬ" достаточно указать в первой (верхней) ячейке диапазона, чтобы очищение произошло во всех остальных строках этого диапазона тоже.


МОИ: Ник, 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
Мир MS Excel » Вопросы и решения » Excel и другие приложения » Google Docs » Очистка ячеек строки при изменении одной конкретной ячейки. (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!