Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Помогите подобрать онлайн-тест на уровень знаний Excel
 
andylu, я бы сам то же самое ответил. Но есть нюанс: среди людей, кто будет тестировать, нет тех, кто сам обладает достаточными знаниями. Тот, кого возьмут, должен быть как в части знания Excel лучше их. А у меня наниматься в добровольцы и собеседовать людей или самому что-то придумавать нет ни желания, ни разумных причин, я в другом месте работаю :)
Помогите подобрать онлайн-тест на уровень знаний Excel
 
Всем привет.
Коллеге требуется помощь с оценкой кандидатов на работу в его отделе на предмет уровня знаний Excel. Причем требуется чел со знанием выше среднего, чтобы умел хотя бы крутить в разные стороны сводные таблицы, свободно обращался с ЕСЛИ, ВПР, условными форматированиями и т.п. А уж если знает формулы массивов - вообще цены ему не будет.
Кадровики направили в адрес двух компаний, но их тесты или очень поверхностные, или содержат вопросы, которые имеют слабое отношение к практическим задачам (например, "что произойдет, если нажать эту или эту кнопку").
Если кто знает вменяемые онлайн-тесты, позволяющие дать реальное представление о компетентности кандидата, буду очень признателен за ссылки.
Событие Change для comboBox срабатывает, хотя comboBox никто не трогает
 
Цитата
vikttur написал:
Вывод: бес - автор темы
Ну я и не отрицаю  :cry:  
А что поделать, не было бы ошибок, зачастую глупых - не было бы смысла в этой теме.
То, что в первую очередь закидают чем ни попадя и обзовут, принимаю как данность Не зря зарегистрировался еще до своего рождения, опыт есть :)
Событие Change для comboBox срабатывает, хотя comboBox никто не трогает
 
Цитата
RAN написал:
Неправильно ты, Дядя Федор, бутерброд ешь!Пока не поздно, выкиньте весь свой код, и начните заново.
Спасибо. Я в принципе уже сам начал что-то подобное воротить, используя массивы вместо фильтров, все заработало как надо.
При этом так и осталось непонятным, почему фильтры так влияют на процесс, вызывают не связанные с ними события и ошибку 1004.
Самое умное, что я на эту тему нашел, это отключение EnableEvents и On Error Resume Next, но это же еще худшая бесовщина. :)
Событие Change для comboBox срабатывает, хотя comboBox никто не трогает
 
Прицепил файл.
Причина кроется в какой-то бесовщине с фильтрами в ListObject'ах. Мало того что они не срабатывают, еще и вызывают события комбобоксов.
Событие Change для comboBox срабатывает, хотя comboBox никто не трогает
 
Всем привет.
Сделал UserForm с несколькими элементами управления, в т.ч. comboBox'ами.
Идея была простая: при выборе пользователем значения из списка в первом combobox'е актуализируется источник данных для второго (RowSource), и т.д.
Но обнаружил странную вещь, которая портит всю логику.
При выборе значения из второго combobox'а используется обработчик события Change. Но он каким-то загадочным образом провоцирует аналогичное событие Change для первого combobox'а, хотя его никто не трогает.
Application.EnableEvents = False не помогает, упорно вызывается cbo1_Change и заканчивается ошибкой.
Можно было бы вставить On Error Resume Next, но хотелось бы обойтись без этого, т.к. это может привести к игнорированию настоящих ошибок.

закрытие формы (Terminate) тоже вызывает событие Change для combobox'ов и орет об ошибке. Если кто-то знает способ, как это обойти, буду благодарен

. Как показала пошаговая отладка, вызов события Change для ComboBox'а происходит в момент попытки применения автофильтра на листе, который никаким образом не имеет к этому ComboBox отношения. Не вижу в этом никакой логики :(

Буду благодарен за любую помощь.
Ошибка 400 при обращении к Range
 
Цитата
gling написал:
Вы запускаете макрос с листа ws2. Ячейки (Cells(1, 1), Cells(3, 1)) на каком листе находятся?
Спасибо за комментарий.
Век живи - ...
Я всегда работал, исходя из того, что в конструкции Range(Cells()) ячейки, указанные в Cells, находятся на том же листе, что и Range.
Исходя из этого неправильного предположения, написал километры страниц кода, и они работали правильно.
Просто перед обращением к данной конструкции всегда приходилось делать Activate того листа, где находится нужный Range.
Ошибка 400 при обращении к Range
 
Цитата
Ігор Гончаренко написал: если на момент выполнения строкиws0.Range(Cells(1, 1), Cells(3, 1)).Copy активен лист Sh2 эта строка упадет по ошибки
Да, но тут есть нюанс: если вызывать операцию из отдельного модуля, то генерируется другая ошибка - Method 'Range' of Object '_Worksheet' failed. Я на нее уже насмотрелся и знаю, что делать. А вот с 400 столкнулся впервые за 10+ лет.
Ошибка 400 при обращении к Range
 
Всем спасибо. Причину проблемы нашел: код находился в листе Sh2.
Когда вынес его в отдельный модуль, ошибка 400 исчезла.
Кстати, сам никогда не цеплял код к отдельным листам, всегда использовал отдельные модули и PERSONAL.
Столкнулся с проблемой, когда копался в чужом коде. Задача состоит в том, чтобы минимизировать число селектов и активейтов, вот и начал экспериментировать.
Ошибка 400 при обращении к Range
 
Цитата
Ігор Гончаренко написал: невозможно обратиться к диапазону одного листа, задавая его двумя ячейками другого листа  
Можете меня обозвать любыми словами, я заранее соглашусь.
Тем не менее, буду признателен, если предложите свой вариант кода, который не будет генерировать ошибку 400.

Вот собственно проблемный файл.
Среда - Excel 2019.
Ошибка 400 при обращении к Range
 
Большое спасибо, но нет, если б все было так просто, я бы не стал беспокоить общественность.
Я ж специально написал: ошибка возникает на самом первом операторе Copy, до попыток что-то сделать с данными в буфере.
Операции копирования с одного листа в другой часто ведут себя капризно, но в данном случае Activate тут точно ни при чем.
Приведенные вами примеры точно так же выдают ошибку 400.
Подозреваю, что слетела какая-то системная настройка.
Ошибка 400 при обращении к Range
 
Всем добрый день.
Странные вещи стали твориться у меня там, где все должно быть гладко.
Есть два листа, пытаемся скопировать данные из одного в другой. Активным является Sh2.
Код
    Dim ws0 As Worksheet
    Dim ws2 As Worksheet
    
    Set ws0 = ThisWorkbook.Sheets("Sh1")
    Set ws2 = ThisWorkbook.Sheets("Sh2")
    
    ws0.Range(Cells(1, 1), Cells(3, 1)).Copy
    
    ws2.Cells(5, 1).Activate
    ws2.Paste

ws0.Range(Cells(1, 1), Cells(3, 1)).Copy вызывает ошибку 400.


Причем на месте Copy может быть что угодно. Системе категорически разонравился метод обращения к Range через Cells.
Аналогичное обращение на текущем листе не выдает никакой ошибки.

Признателен за любую помощь.
Альтернатива Суммирования функций суммеслимн
 
Формулы массивов покороче выглядят (см. вложение).

Вообще, на тему лаконичности, всегда нужно искать баланс между двумя подходами, в зависимости от вашего восприятия:

1) разбивать сложные вычисления на простые и более понятные для восприятия формулы в разных ячейках, минус - приходится создавать дополнительные вспомогательные поля;
2) запихивать максимум вычислений в одну ячейку, тем самым избавившись от дополнительных полей, но тогда формулы будут длинными и для людей неопытных вообще непонятные.
Выбор последнего значения среди повторяющихся
 
Основная идея: для каждой строки суммировать значения в столбце с единицами и ноликами после нее. Как только станет 0, это означает, что дошли до нужной строки.
Там даже не пробел, а непечатный символ после единицы. Будь там нормальные числа, было бы гораздо проще.
Если от них нельзя избавиться, посмотрите как во вложенном файле.
Подсчет непустых ячеек по условию
 
Посмотрите, по идее при таком решении число столбцов может быть какое угодно.
Изменено: Alex K - 16.11.2020 11:28:04 (Не прикрепился файл)
Суммировать значения из ячеек с текстом по ключевому слову
 
Вы приложили пустой файл.
VBA - присвоение значений ячеек с другого листа
 
Пример.
Вот такой код выдаст ошибку:
Sheets("Лист1").Activate
Set h = Sheets("Лист2").Range(Cells(1, 1), Cells(10, 10)).Find(What:="something")

А вот такой будет работать:
Sheets("Лист2").Activate
Set h = Sheets("Лист2").Range(Cells(1, 1), Cells(10, 10)).Find(What:="something")
VBA - присвоение значений ячеек с другого листа
 
denis76, из своего опыта могу сказать, что многие свойства и методы объекта Range (например, Find) не работают, если лист не является активным. IMHO это следует воспринимать как данность и при обращениях к Range сначала использовать Sheets(имя листа).Select или Activate.
Не работает метод GoalSeek. Помогите найти причину.
 
У вас опечатка в определении параметров функции GoalSeek.
Поменяйте ChangingCells на ChangingCell, и эта функция заработает.

В процедуре "ПостроениеГрафика" нужно предусмотреть ситуацию, когда перед запуском программы диаграммы отсутствуют, т.е. поменять
ActiveSheet.ChartObjects.Delete например, на If ActiveSheet.ChartObjects.Count > 0 Then ActiveSheet.ChartObjects.Delete.
Использование оператора IF при выборе места в таблице в зависимости от текущего листа
 
Может, пригодится
оптимизация фазировки, подбор оптимальных подключений электроприемников в щите
 
Цитата
Andrew пишет:
Файл попробовал. При тех данных, которые были указаны в качестве примера, все работает на "отлично". Но попробуйте внести в столбец "Ток нагрузки" значение, превышающее, скажем 150. Я попробовал. Результат такого эксперимента - в прилагаемом файле.
Andrew, но ведь там в принципе ничего другого и не могло получиться, если у Вас на одно из значений тока нагрузки приходится 200, а на все остальные вместе взятые - 317,7. Предложенный Skif-F алгоритм распихал эти 317,7 практически равномерно, т.е. все сработало правильно.
Другое дело - как обойтись без макросов.
После установки Excel2007 макрос безбожно тормозит
 
KukLP, спасибо за совет, но это не помогло, наоборот все зависло наглухо.  
 
Проблему я решил следующим образом:  
 
wsTarget.Paste  
 
заменил на:  
 
with wsTarget  
  .Range(Cells(tmpFirstRow, COL_ARR_ID), Cells(tmpLastRow, COL_ARR_NOTE)).PasteSpecial Paste:=xlPasteFormats  
  .Range(Cells(tmpFirstRow, COL_ARR_ID), Cells(tmpLastRow, COL_ARR_NOTE)).PasteSpecial Paste:=xlPasteFormulasAndNumberFormats  
End With  
 
Т.е.получается, что в исходных файлах зашита какая-то дрянь, которая очень долго копируется, может какие-нибудь validation rules, но факт остается фактом - теперь макрос стал выполняться за 10 секунд (вместо часа), из-за одного лишь указанного изменения.  
 
Надеюсь, кому-нибудь тоже пригодится
После установки Excel2007 макрос безбожно тормозит
 
В предыдущем сообщении пытался процитировать следующее: "Если лист не выделять селектом, то метод Find не работает ("_worksheet.range failed")".
После установки Excel2007 макрос безбожно тормозит
 
Прошу прощения, что впопыхах всех ввел в заблуждение вот этой репликой:  
{quote}{login=Drakula76}Если лист не выделять селектом, то метод Find не работает ("_worksheet.range failed").{/post}{/quote}  
На самом деле имелся в виду, конечно же, Activate, а никакой не селект. Не знаю как это обойти, но у меня если лист в процессе выполнения кода не является активным, то попытка применить Find выдает ошибку.  
 
Большое спасибо The_Prist за совет проверить код на предмет выделения всего строки или столбца, я это устранил где только можно, вроде бы стало работать быстрее, но не очень. Пройдя код в пошаговом режиме, я выяснил, что все тормоза действительно сосредоточены в одной-единственной операции копирования-вставки, которая у меня унаследовалась от макрорекордера. Как ее ускорить, я пока не представляю.  
 
wsSource.Activate  
rngTmp.Copy      
wsTarget.Activate  
wsTarget.Cells(tmpFirstRow, COL_ARR_ID).Select  
wsTarget.Paste  
Application.CutCopyMode = False  
 
Пояснение: rngTmp - диапазон данных, определенный ранее. Копирование необходимо полное, включая форматы, объединенные ячейки и тп. Копированием одних лишь значений отделаться нельзя.  
 
Поскольку в 2003 никаких тормозов это не вызывало, я особо и не задумывался, как в данном случае обойтись без Select. Если кто подскажет, буду очень благодарен.
После установки Excel2007 макрос безбожно тормозит
 
Если в коде есть какие-то проблемы, то почему в 2003 тот же самый макрос на том же самом компе выполнялся за секунды, а сейчас за десятки минут?    
 
Если уж действительно теперь применение Select так критично, то чем его заменить? Если лист не выделять селектом, то метод Find не работает ("_worksheet.range failed").
После установки Excel2007 макрос безбожно тормозит
 
Уважаемые, буду очень признателен за мнения.  
 
В Excel2003 я сделал макрос, который из 50 разных файлов однотипную информацию и склеивает ее в один массив данных.  
Время его выполнения было в пределах одной минуты (с помощью отключения ScreenUpdating и ручного пересчета формул).    
После установки Excel2007 макрос стал работать в 10 раз медленнее. К тексту макроса я не притрагивался.  
 
Можно ли это вылечить?
Страницы: 1
Наверх