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

Вход

Регистрация

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

 

= Мир MS Excel/Добавление даты изменения ячейки в Google Таблицы (не вышло) - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Добавление даты изменения ячейки в Google Таблицы (не вышло)
Sergey Дата: Четверг, 29.01.2015, 04:59 | Сообщение № 1
Группа: Гости
Наткнулся на решение своей проблемы http://www.excelworld.ru/forum/23-6615-1
, но вот всю ночь промучался но результата не получил.

Выдет ошибку черт при проверке скрипта.
Ошибка: 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());
}
};
[/vba]


Сообщение отредактировал Serge_007 - Четверг, 29.01.2015, 05:58
 
Ответить
СообщениеНаткнулся на решение своей проблемы http://www.excelworld.ru/forum/23-6615-1
, но вот всю ночь промучался но результата не получил.

Выдет ошибку черт при проверке скрипта.
Ошибка: 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());
}
};
[/vba]

Автор - Sergey
Дата добавления - 29.01.2015 в 04:59
anvg Дата: Четверг, 29.01.2015, 09:36 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
И вам здравствуйте
Проект теперь в Google Apps нужно авторизовывать. Только после этого будет выполняться скрипт. Его можно и сократить
[vba]
Код

function onEdit(e) {
if ( e.range.getColumn() == 1 ) {
     e.range.offset(0, 1).setValue(new Date().toString());
}
};
[/vba]
 
Ответить
СообщениеИ вам здравствуйте
Проект теперь в Google Apps нужно авторизовывать. Только после этого будет выполняться скрипт. Его можно и сократить
[vba]
Код

function onEdit(e) {
if ( e.range.getColumn() == 1 ) {
     e.range.offset(0, 1).setValue(new Date().toString());
}
};
[/vba]

Автор - anvg
Дата добавления - 29.01.2015 в 09:36
Pelena Дата: Четверг, 29.01.2015, 09:42 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 19403
Репутация: 4555 ±
Замечаний: ±

Excel 365 & Mac Excel
У меня работает. Надо только сохранить проект, чтобы функция появилась в раскрывающемся списке на Панели инструментов


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеУ меня работает. Надо только сохранить проект, чтобы функция появилась в раскрывающемся списке на Панели инструментов

Автор - Pelena
Дата добавления - 29.01.2015 в 09:42
Pelena Дата: Четверг, 29.01.2015, 18:23 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 19403
Репутация: 4555 ±
Замечаний: ±

Excel 365 & Mac Excel
А попробуйте произвести какие-нибудь другие действия, не в столбце А. Лист переименуйте, например


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеА попробуйте произвести какие-нибудь другие действия, не в столбце А. Лист переименуйте, например

Автор - Pelena
Дата добавления - 29.01.2015 в 18:23
kosarev Дата: Суббота, 31.01.2015, 11:31 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Вот такая беда происходит при попытке проверить проект, которая необходима чтобы авторизоваться на app (



Сообщение отредактировал kosarev - Суббота, 31.01.2015, 11:32
 
Ответить
СообщениеВот такая беда происходит при попытке проверить проект, которая необходима чтобы авторизоваться на app (


Автор - kosarev
Дата добавления - 31.01.2015 в 11:31
kosarev Дата: Понедельник, 02.02.2015, 18:33 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
:'( прям совсем никто не может помочь?
У меня тут ещё новая заморочка возникла - есть ли формула или может можно создать скрипт который автоматом добавляет новую строку.
Хочу сделать через проверку данных список, чтобы при выборе из этого списка значения "создать новую строку" снизу под ячейкой добавлялась новая строка.
К кому можно обратиться и сколько может стоит.
Очень хочется найти человека который способен на коммерческой основе помогать в таких вопросах.
 
Ответить
Сообщение:'( прям совсем никто не может помочь?
У меня тут ещё новая заморочка возникла - есть ли формула или может можно создать скрипт который автоматом добавляет новую строку.
Хочу сделать через проверку данных список, чтобы при выборе из этого списка значения "создать новую строку" снизу под ячейкой добавлялась новая строка.
К кому можно обратиться и сколько может стоит.
Очень хочется найти человека который способен на коммерческой основе помогать в таких вопросах.

Автор - kosarev
Дата добавления - 02.02.2015 в 18:33
Pelena Дата: Понедельник, 02.02.2015, 19:13 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 19403
Репутация: 4555 ±
Замечаний: ±

Excel 365 & Mac Excel
kosarev, если в сообщении об ошибке нажать Закрыть, перейти на лист и заполнить любую ячейку столбца А, что у Вас получится?


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщениеkosarev, если в сообщении об ошибке нажать Закрыть, перейти на лист и заполнить любую ячейку столбца А, что у Вас получится?

Автор - Pelena
Дата добавления - 02.02.2015 в 19:13
kosarev Дата: Вторник, 03.02.2015, 01:17 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
^_^ Уфф...я почему то даже и не подумал что это должна быть именно 1 я колонка

Pelena, Спасибо огромное за подсказку. Превелико благодарен!
Заработало!
Но возник следующий камень преткновения -
оказывается если число в ячейке возникает в следствии обработки какой-либо формулы скрипт не срабатывает (
Исключительно ручной ввод действует (
Pelena, может Вы по этому вопросу сможете дать рекомендацию?
 
Ответить
Сообщение^_^ Уфф...я почему то даже и не подумал что это должна быть именно 1 я колонка

Pelena, Спасибо огромное за подсказку. Превелико благодарен!
Заработало!
Но возник следующий камень преткновения -
оказывается если число в ячейке возникает в следствии обработки какой-либо формулы скрипт не срабатывает (
Исключительно ручной ввод действует (
Pelena, может Вы по этому вопросу сможете дать рекомендацию?

Автор - kosarev
Дата добавления - 03.02.2015 в 01:17
anvg Дата: Вторник, 03.02.2015, 07:04 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Доброе время суток
Цитата
число в ячейке возникает в следствии обработки какой-либо формулы
Чтобы это значило? А до этого что в ячейке была пустота?
И пока 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]


Сообщение отредактировал anvg - Вторник, 03.02.2015, 08:45
 
Ответить
СообщениеДоброе время суток
Цитата
число в ячейке возникает в следствии обработки какой-либо формулы
Чтобы это значило? А до этого что в ячейке была пустота?
И пока 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]

Автор - anvg
Дата добавления - 03.02.2015 в 07:04
kosarev Дата: Вторник, 03.02.2015, 09:39 | Сообщение № 10
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
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]


Сообщение отредактировал Pelena - Вторник, 03.02.2015, 09:45
 
Ответить
Сообщение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
Дата добавления - 03.02.2015 в 09:39
anvg Дата: Вторник, 03.02.2015, 09:51 | Сообщение № 11
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Вам тогда стоит эту строчку
[vba]
Код
sheet.getRange(idRow, idCol + 3).setValue(new Date().toString());
[/vba]
поменять на
[vba]
Код
sheet.getRange(idRow, idCol + 3).setValue(new Date());
[/vba]
А для столбца, в который выводится дата, установить формат ячеек время. Верхний код пишет текстовую строку.
По второму вопросу, лучше приложите файл Excel, с описанием что на входе и что должно получиться на выходе.
 
Ответить
СообщениеВам тогда стоит эту строчку
[vba]
Код
sheet.getRange(idRow, idCol + 3).setValue(new Date().toString());
[/vba]
поменять на
[vba]
Код
sheet.getRange(idRow, idCol + 3).setValue(new Date());
[/vba]
А для столбца, в который выводится дата, установить формат ячеек время. Верхний код пишет текстовую строку.
По второму вопросу, лучше приложите файл Excel, с описанием что на входе и что должно получиться на выходе.

Автор - anvg
Дата добавления - 03.02.2015 в 09:51
Raw Дата: Воскресенье, 31.01.2016, 19:00 | Сообщение № 12
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Вот мой вариант, адаптировал под себя.
[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 сделал по колхозному, зато работает)))
 
Ответить
СообщениеВот мой вариант, адаптировал под себя.
[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
Дата добавления - 31.01.2016 в 19:00
Ант77 Дата: Четверг, 23.11.2017, 23:18 | Сообщение № 13
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
anvg, Здравствуйте, подскажите ,пожалуйста, как сделать чтобы функция срабатывала не на всех страницах, а только на одной определенной
 
Ответить
Сообщениеanvg, Здравствуйте, подскажите ,пожалуйста, как сделать чтобы функция срабатывала не на всех страницах, а только на одной определенной

Автор - Ант77
Дата добавления - 23.11.2017 в 23:18
Ант77 Дата: Пятница, 24.11.2017, 01:42 | Сообщение № 14
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
anvg, помогите , пожадуйста, не срабатывает код
[vba]
Код
function onEdit(e) {
var sheet= e.source.getActiveSheet();
if (sheet.getName() == "расх матер" ) {
var idCol = e.range.getColumn();
var idRow = e.range.getRow();
if ( idCol == 2 ) {
sheet.getRange(idRow, idCol - 1).setValue(new Date());
}
}

};
function onEdit(e) {
var sheet= e.source.getActiveSheet();
if (sheet.getName() == "оплата сотр" ) {
var idCol = e.range.getColumn();
var idRow = e.range.getRow();
if ( idCol == 2 ) {
sheet.getRange(idRow, idCol + 1).setValue(new Date());
}
}

};
[/vba]
 
Ответить
Сообщениеanvg, помогите , пожадуйста, не срабатывает код
[vba]
Код
function onEdit(e) {
var sheet= e.source.getActiveSheet();
if (sheet.getName() == "расх матер" ) {
var idCol = e.range.getColumn();
var idRow = e.range.getRow();
if ( idCol == 2 ) {
sheet.getRange(idRow, idCol - 1).setValue(new Date());
}
}

};
function onEdit(e) {
var sheet= e.source.getActiveSheet();
if (sheet.getName() == "оплата сотр" ) {
var idCol = e.range.getColumn();
var idRow = e.range.getRow();
if ( idCol == 2 ) {
sheet.getRange(idRow, idCol + 1).setValue(new Date());
}
}

};
[/vba]

Автор - Ант77
Дата добавления - 24.11.2017 в 01:42
Gustav Дата: Пятница, 24.11.2017, 08:46 | Сообщение № 15
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Ант77, оставьте только одну функцию onEdit и разветвляйте всю логику в ней. Например, вот с такими минимальными усилиями - просто перестановка и перегруппировка Ваших строк:
[vba]
Код
function onEdit(e) {  
  var idCol = e.range.getColumn();
  if ( idCol == 2 ) {
    
    var sheet = e.source.getActiveSheet();
    var idRow = e.range.getRow();
    
    if (sheet.getName() == "оплата сотр") {
      sheet.getRange(idRow, idCol + 1).setValue(new Date());
    }
    
    if (sheet.getName() == "расх матер" ) {
      sheet.getRange(idRow, idCol - 1).setValue(new Date());
    }
  }   
}
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеАнт77, оставьте только одну функцию onEdit и разветвляйте всю логику в ней. Например, вот с такими минимальными усилиями - просто перестановка и перегруппировка Ваших строк:
[vba]
Код
function onEdit(e) {  
  var idCol = e.range.getColumn();
  if ( idCol == 2 ) {
    
    var sheet = e.source.getActiveSheet();
    var idRow = e.range.getRow();
    
    if (sheet.getName() == "оплата сотр") {
      sheet.getRange(idRow, idCol + 1).setValue(new Date());
    }
    
    if (sheet.getName() == "расх матер" ) {
      sheet.getRange(idRow, idCol - 1).setValue(new Date());
    }
  }   
}
[/vba]

Автор - Gustav
Дата добавления - 24.11.2017 в 08:46
_Boroda_ Дата: Пятница, 24.11.2017, 09:03 | Сообщение № 16
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Ант77, - Прочитайте Правила форума
- Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)
До исправления ответ скрыт


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеАнт77, - Прочитайте Правила форума
- Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)
До исправления ответ скрыт

Автор - _Boroda_
Дата добавления - 24.11.2017 в 09:03
  • Страница 1 из 1
  • 1
Поиск:

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