Выдет ошибку черт при проверке скрипта. Ошибка: TypeError: Не удается вызвать метод "getActiveSheet" объекта undefined. (строка 2).
Помогите разобраться в тонкостях. Никогда раньше со скриптами дела не имел. За ночь лишь понял что почему то не может начать работу с активным листом
Пересылаю из закрытой темы:
В google docs можно тоже через события при изменении ячейки в 1 столбце будет вводится дата и время в соседней ячейке второго столбца (добавить "Инструменты/Редактор скриптов")
[vba]
Код
function onEdit(e) { var sheet = e.source.getActiveSheet(); var idCol = e.range.getColumn(); var idRow = e.range.getRow(); if ( idCol == 1 ) { sheet.getRange(idRow, idCol + 1).setValue(new Date().toString()); } };
Выдет ошибку черт при проверке скрипта. Ошибка: TypeError: Не удается вызвать метод "getActiveSheet" объекта undefined. (строка 2).
Помогите разобраться в тонкостях. Никогда раньше со скриптами дела не имел. За ночь лишь понял что почему то не может начать работу с активным листом
Пересылаю из закрытой темы:
В google docs можно тоже через события при изменении ячейки в 1 столбце будет вводится дата и время в соседней ячейке второго столбца (добавить "Инструменты/Редактор скриптов")
[vba]
Код
function onEdit(e) { var sheet = e.source.getActiveSheet(); var idCol = e.range.getColumn(); var idRow = e.range.getRow(); if ( idCol == 1 ) { sheet.getRange(idRow, idCol + 1).setValue(new Date().toString()); } };
прям совсем никто не может помочь? У меня тут ещё новая заморочка возникла - есть ли формула или может можно создать скрипт который автоматом добавляет новую строку. Хочу сделать через проверку данных список, чтобы при выборе из этого списка значения "создать новую строку" снизу под ячейкой добавлялась новая строка. К кому можно обратиться и сколько может стоит. Очень хочется найти человека который способен на коммерческой основе помогать в таких вопросах.
прям совсем никто не может помочь? У меня тут ещё новая заморочка возникла - есть ли формула или может можно создать скрипт который автоматом добавляет новую строку. Хочу сделать через проверку данных список, чтобы при выборе из этого списка значения "создать новую строку" снизу под ячейкой добавлялась новая строка. К кому можно обратиться и сколько может стоит. Очень хочется найти человека который способен на коммерческой основе помогать в таких вопросах.kosarev
Уфф...я почему то даже и не подумал что это должна быть именно 1 я колонка
Pelena, Спасибо огромное за подсказку. Превелико благодарен! Заработало! Но возник следующий камень преткновения - оказывается если число в ячейке возникает в следствии обработки какой-либо формулы скрипт не срабатывает ( Исключительно ручной ввод действует ( Pelena, может Вы по этому вопросу сможете дать рекомендацию?
Уфф...я почему то даже и не подумал что это должна быть именно 1 я колонка
Pelena, Спасибо огромное за подсказку. Превелико благодарен! Заработало! Но возник следующий камень преткновения - оказывается если число в ячейке возникает в следствии обработки какой-либо формулы скрипт не срабатывает ( Исключительно ручной ввод действует ( Pelena, может Вы по этому вопросу сможете дать рекомендацию?kosarev
число в ячейке возникает в следствии обработки какой-либо формулы
Чтобы это значило? А до этого что в ячейке была пустота? И пока Google spreadsheet не предоставляет прямой возможности определить, подобно Excel Dependents или DirectDependents, зависимые ячейки от той ячейки в которую был выполнен ввод. Потребуется тогда просмотр формул по листу/листам книги, чтобы определить в какой из формул есть ссылка на изменяемую вручную ячейку. Что, как вы понимаете, достаточно долгий процесс. Код для вставки строки, если в ячейку ввели (или выбрали из списка) "Вставка строки" на листе с именем "Лист2", с учётом вывода даты при изменении значения столбца А. [vba]
Код
function onEdit(e) { //var sheet = e.source.getActiveSheet(); var idCol = e.range.getColumn(); var idRow = e.range.getRow(); if ( idCol == 1 ) { e.range.offset(0, 1).setValue(new Date().toString()); }; var inputSheet = e.source.getActiveSheet(); var cell = inputSheet.getActiveCell(); if (inputSheet.getName() == "Лист2") { if ( (cell.getValue().toString() == "Вставка строки") ) { inputSheet.insertRowAfter(cell.getRow()); } } }//onEdit event handle
[/vba]
Доброе время суток
Цитата
число в ячейке возникает в следствии обработки какой-либо формулы
Чтобы это значило? А до этого что в ячейке была пустота? И пока Google spreadsheet не предоставляет прямой возможности определить, подобно Excel Dependents или DirectDependents, зависимые ячейки от той ячейки в которую был выполнен ввод. Потребуется тогда просмотр формул по листу/листам книги, чтобы определить в какой из формул есть ссылка на изменяемую вручную ячейку. Что, как вы понимаете, достаточно долгий процесс. Код для вставки строки, если в ячейку ввели (или выбрали из списка) "Вставка строки" на листе с именем "Лист2", с учётом вывода даты при изменении значения столбца А. [vba]
Код
function onEdit(e) { //var sheet = e.source.getActiveSheet(); var idCol = e.range.getColumn(); var idRow = e.range.getRow(); if ( idCol == 1 ) { e.range.offset(0, 1).setValue(new Date().toString()); }; var inputSheet = e.source.getActiveSheet(); var cell = inputSheet.getActiveCell(); if (inputSheet.getName() == "Лист2") { if ( (cell.getValue().toString() == "Вставка строки") ) { inputSheet.insertRowAfter(cell.getRow()); } } }//onEdit event handle
anvg, Спасибо что помогаете! Начал понимать смысл скрипта ) В моем случае подошла такая правка
[vba]
Код
function onEdit(e) { var sheet = e.source.getActiveSheet(); var idCol = e.range.getColumn(); var idRow = e.range.getRow(); if ( idCol == 3 ) { sheet.getRange(idRow, idCol + 3).setValue(new Date().toString()); } };
[/vba]
Остались вопросы: 1. Что изменить в скрипте чтобы ставилось в формате времени (17:31, а не даты как сейчас Tue Feb 03 2015 09:20:45 GMT+0300 (EAT)) изменение Date на Time результат не принесло 2. Как сделать так чтобы скрипт исключал некоторые листы из обработки?
За второй скрипт тоже спасибо. Правда там задача несколько иная и к тому же я не до конца описал функционал.
Смысл в том что это отчет фотоателье.
Где из списка выбирается "услуга" | следом ставится "кол-во" | автоматом выдирается "цена" за данную услугу | и ставится общий "итог" | далее автоматом теперь вылезает время указания в столбце "кол-во"
В итоге хочется чтобы при выборе в столбце "услуг" значения "Вставка строки" копировала и вставляла со всеми формулами предыдущую верхнюю строку (смысл главный чтобы формулы переносились) [moder]1) Оформляйте коды тегами 2) вопрос по вставке строки с формулами не относится к данной теме, поэтому создавайте новую[/moder]
anvg, Спасибо что помогаете! Начал понимать смысл скрипта ) В моем случае подошла такая правка
[vba]
Код
function onEdit(e) { var sheet = e.source.getActiveSheet(); var idCol = e.range.getColumn(); var idRow = e.range.getRow(); if ( idCol == 3 ) { sheet.getRange(idRow, idCol + 3).setValue(new Date().toString()); } };
[/vba]
Остались вопросы: 1. Что изменить в скрипте чтобы ставилось в формате времени (17:31, а не даты как сейчас Tue Feb 03 2015 09:20:45 GMT+0300 (EAT)) изменение Date на Time результат не принесло 2. Как сделать так чтобы скрипт исключал некоторые листы из обработки?
За второй скрипт тоже спасибо. Правда там задача несколько иная и к тому же я не до конца описал функционал.
Смысл в том что это отчет фотоателье.
Где из списка выбирается "услуга" | следом ставится "кол-во" | автоматом выдирается "цена" за данную услугу | и ставится общий "итог" | далее автоматом теперь вылезает время указания в столбце "кол-во"
В итоге хочется чтобы при выборе в столбце "услуг" значения "Вставка строки" копировала и вставляла со всеми формулами предыдущую верхнюю строку (смысл главный чтобы формулы переносились) [moder]1) Оформляйте коды тегами 2) вопрос по вставке строки с формулами не относится к данной теме, поэтому создавайте новую[/moder]kosarev
Сообщение отредактировал Pelena - Вторник, 03.02.2015, 09:45
[/vba] А для столбца, в который выводится дата, установить формат ячеек время. Верхний код пишет текстовую строку. По второму вопросу, лучше приложите файл Excel, с описанием что на входе и что должно получиться на выходе.
[/vba] А для столбца, в который выводится дата, установить формат ячеек время. Верхний код пишет текстовую строку. По второму вопросу, лучше приложите файл Excel, с описанием что на входе и что должно получиться на выходе.anvg
function onEdit(e) { var idCol = e.range.getColumn(); // номер столбца var idRow = e.range.getRow(); // номер строки var Value = e.range.offset(0, -1).getValues(); // Смотрим что в ячейке с лева на 1 var Val = e.range.getValues(); // Смотрим что в ячейке
if ( idCol == 3 ) { if ( idRow > 6 ) { if ( Value == "" ) {
e.range.offset(0, -1).setValue(new Date());
}; if ( Val == "" ) {
e.range.offset(0, -1).setValue("");
}; }; }; }
[/vba] У меня домашняя бухгалтерия на google docs при заполнении ячейки расход надоело в ручную ставить дату. Вот решил автоматизировать, главная особенность что если дата уже есть то её не поменяет и если удалить значение расхода то и дата уберется.
ПС ну и выставлен мой диапазон начала работы авто подстановки даты. ПСПС не понял как добавлять в ветвлении AND сделал по колхозному, зато работает)))
Вот мой вариант, адаптировал под себя. [vba]
Код
function onEdit(e) { var idCol = e.range.getColumn(); // номер столбца var idRow = e.range.getRow(); // номер строки var Value = e.range.offset(0, -1).getValues(); // Смотрим что в ячейке с лева на 1 var Val = e.range.getValues(); // Смотрим что в ячейке
if ( idCol == 3 ) { if ( idRow > 6 ) { if ( Value == "" ) {
e.range.offset(0, -1).setValue(new Date());
}; if ( Val == "" ) {
e.range.offset(0, -1).setValue("");
}; }; }; }
[/vba] У меня домашняя бухгалтерия на google docs при заполнении ячейки расход надоело в ручную ставить дату. Вот решил автоматизировать, главная особенность что если дата уже есть то её не поменяет и если удалить значение расхода то и дата уберется.
ПС ну и выставлен мой диапазон начала работы авто подстановки даты. ПСПС не понял как добавлять в ветвлении AND сделал по колхозному, зато работает)))Raw
Ант77, оставьте только одну функцию onEdit и разветвляйте всю логику в ней. Например, вот с такими минимальными усилиями - просто перестановка и перегруппировка Ваших строк: [vba]
Код
function onEdit(e) { var idCol = e.range.getColumn(); if ( idCol == 2 ) {
var sheet = e.source.getActiveSheet(); var idRow = e.range.getRow();
Ант77, оставьте только одну функцию onEdit и разветвляйте всю логику в ней. Например, вот с такими минимальными усилиями - просто перестановка и перегруппировка Ваших строк: [vba]
Код
function onEdit(e) { var idCol = e.range.getColumn(); if ( idCol == 2 ) {
var sheet = e.source.getActiveSheet(); var idRow = e.range.getRow();
Ант77, - Прочитайте Правила форума - Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь) До исправления ответ скрыт
Ант77, - Прочитайте Правила форума - Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь) До исправления ответ скрыт_Boroda_