приветствую всех. первым делом хочу поблагодарить создателей данного ресурса, а так же администраторов и всех кто помогает незнающим людям. много отсюда подчерпнул но дошел до предела своих знаний и умений. сразу скажу что excel не знаю почти вобще, а так же ВБА. задача такова: График работы, опозданий и подсчет штрафа за них, по сотрудникам. Если коротко, есть считывающее оборудование, которое автоматом заносит данные (код чипа)в excel документ, когда сотрудник прикладывает пластиковую карту с чипом к нему. Чего хочется: В приложенном фаиле есть макрос, который нашел на данном форуме и немного его изменил(интуитивно) и получил что мне нужно. Далее подсчеты делают формулы. Что бы формулы считали их нужно протянуть вниз на ннное кол-во ячеек. Хочется не иметь дело с ними а все считалось в макросе и выдавалось в ячейки. то есть не нужно будет тянуть формулы по столбцам, а так же их случайно не смогут изменить и т.д.Чтоб каждый столбец всегда выполнял оду и ту же операцию вечно. Правила читал, но если позволите хотелось бы в этой теме довести задуманное до конца так как еще вопросов и пожеланий много а темы плодить не хочу. заранее благодарю за помощь.
приветствую всех. первым делом хочу поблагодарить создателей данного ресурса, а так же администраторов и всех кто помогает незнающим людям. много отсюда подчерпнул но дошел до предела своих знаний и умений. сразу скажу что excel не знаю почти вобще, а так же ВБА. задача такова: График работы, опозданий и подсчет штрафа за них, по сотрудникам. Если коротко, есть считывающее оборудование, которое автоматом заносит данные (код чипа)в excel документ, когда сотрудник прикладывает пластиковую карту с чипом к нему. Чего хочется: В приложенном фаиле есть макрос, который нашел на данном форуме и немного его изменил(интуитивно) и получил что мне нужно. Далее подсчеты делают формулы. Что бы формулы считали их нужно протянуть вниз на ннное кол-во ячеек. Хочется не иметь дело с ними а все считалось в макросе и выдавалось в ячейки. то есть не нужно будет тянуть формулы по столбцам, а так же их случайно не смогут изменить и т.д.Чтоб каждый столбец всегда выполнял оду и ту же операцию вечно. Правила читал, но если позволите хотелось бы в этой теме довести задуманное до конца так как еще вопросов и пожеланий много а темы плодить не хочу. заранее благодарю за помощь.Vetali
Если опоздание больше 14 часов получалось отрицательное значение. В макросе в таком случае добавляются сутки. Если сотрудник опоздает на работу на 1 месяц и два часа, то штраф будет за два часа. Думаю, вам надо подумать над алгоритмом. Надо запоминать когда сотрудник был на работе в предыдущий раз и из этого рассчитывать опоздание. См. Файл
Если опоздание больше 14 часов получалось отрицательное значение. В макросе в таком случае добавляются сутки. Если сотрудник опоздает на работу на 1 месяц и два часа, то штраф будет за два часа. Думаю, вам надо подумать над алгоритмом. Надо запоминать когда сотрудник был на работе в предыдущий раз и из этого рассчитывать опоздание. См. ФайлAlexM
AlexM, великолепно) большое спасибо.увидев на форуме так много восторженных отзывов и благодарностей подозревал что и меня настигнет такое) но когда прошло много времени и не было ответа подумал что никому нет дело до моей проблемы(виноват, ошибался).понимаю что требуется время на решение. ну, каждый день вроде считается по новому, то есть каждое утро при вводе данных, расчет будет делаться от 10 часов текущего дня, если я правильно понимаю. судя по тестам за пару дней. далее, рискую быть наказанным , но попробую задать следующий вопрос. как изменить макрос чтоб перед каждым новым месяцем где-нибудь в середине листа крупным шрифтом(скажем 20) автоматически прописывалось название месяца и год. пример: МАРТ 2013 а под этим, снова строка А1, ну "имя, время, дата и т.д."
AlexM, великолепно) большое спасибо.увидев на форуме так много восторженных отзывов и благодарностей подозревал что и меня настигнет такое) но когда прошло много времени и не было ответа подумал что никому нет дело до моей проблемы(виноват, ошибался).понимаю что требуется время на решение. ну, каждый день вроде считается по новому, то есть каждое утро при вводе данных, расчет будет делаться от 10 часов текущего дня, если я правильно понимаю. судя по тестам за пару дней. далее, рискую быть наказанным , но попробую задать следующий вопрос. как изменить макрос чтоб перед каждым новым месяцем где-нибудь в середине листа крупным шрифтом(скажем 20) автоматически прописывалось название месяца и год. пример: МАРТ 2013 а под этим, снова строка А1, ну "имя, время, дата и т.д."Vetali
Шикарно! Еще одно спасибо. А можно после каждого месяца, следующая строка будет как строка А1, то есть с названием столбцов? что бы по прошествию 10 месяцев не возвращаться вверх и смотреть как столбцы называются?
Почему ничего не происходит при нажатии плюсика? (просто обновляется страница и все)
AlexM,
Шикарно! Еще одно спасибо. А можно после каждого месяца, следующая строка будет как строка А1, то есть с названием столбцов? что бы по прошествию 10 месяцев не возвращаться вверх и смотреть как столбцы называются?
Почему ничего не происходит при нажатии плюсика? (просто обновляется страница и все)Vetali
можно после каждого месяца, следующая строка будет как строка А1
Думаю тут надо закрепить области. Почитайте в справке как это делается. На примере Эксель 2003 Кликнуть по А2 раз. Окно - Закрепить области По второму вопросу. Ошибка появилась при вводе "а" в А2 Потому что в макросе сравниваются даты из вводимой строки и предыдущей. В предыдущей строке даты нет Что надо сделать Перед строкой [vba]
Код
If Month(Target.Offset(-1, 2)) < Month(Date) Then
[/vba] вставляете строку обработки ошибок [vba]
Код
On Error GoTo Error
[/vba] А конец макроса дополняете меткой [vba]
Код
.Value = Date End With End If Error: End If End Sub
[/vba]
Цитата (Vetali)
можно после каждого месяца, следующая строка будет как строка А1
Думаю тут надо закрепить области. Почитайте в справке как это делается. На примере Эксель 2003 Кликнуть по А2 раз. Окно - Закрепить области По второму вопросу. Ошибка появилась при вводе "а" в А2 Потому что в макросе сравниваются даты из вводимой строки и предыдущей. В предыдущей строке даты нет Что надо сделать Перед строкой [vba]
Код
If Month(Target.Offset(-1, 2)) < Month(Date) Then
[/vba] вставляете строку обработки ошибок [vba]
Код
On Error GoTo Error
[/vba] А конец макроса дополняете меткой [vba]
Код
.Value = Date End With End If Error: End If End Sub
AlexM, Спасибо, с ошибкой получилось. Про области попробую почитать и разобраться. Вот с чем столкнулся еще, после подсчета итогов и ввод данных в ручную, при поступлении данных в А1 месяц не проставляется. Возможно ли сделать автоматический подсчет итогов по каждому из сотрудников по окончанию месяца, а потом уже вставить название следующего месяца, и после этого уже дальше в штатном режиме ввод данных и подсчеты как в приложенном ниже файле?
AlexM, Спасибо, с ошибкой получилось. Про области попробую почитать и разобраться. Вот с чем столкнулся еще, после подсчета итогов и ввод данных в ручную, при поступлении данных в А1 месяц не проставляется. Возможно ли сделать автоматический подсчет итогов по каждому из сотрудников по окончанию месяца, а потом уже вставить название следующего месяца, и после этого уже дальше в штатном режиме ввод данных и подсчеты как в приложенном ниже файле?Vetali
AlexM, Класс. Идейка еще одна: хотелось бы запретить изменение уже заполненных данными ячеек. а в свободные чтоб можно было писать, заметки ну или другой текст.хотелось бы макросом, чтоб можно было потом просто скопировать этот макрос в любой файл и все сразу работало и приняло уже готовый вид того что есть. угостил бы вас пивом, да тут никак. плюсануть тоже почему-то не получается.при первой возможности скромно плюсану яндекс карточкой(сообщу в личке).
AlexM, Класс. Идейка еще одна: хотелось бы запретить изменение уже заполненных данными ячеек. а в свободные чтоб можно было писать, заметки ну или другой текст.хотелось бы макросом, чтоб можно было потом просто скопировать этот макрос в любой файл и все сразу работало и приняло уже готовый вид того что есть. угостил бы вас пивом, да тут никак. плюсануть тоже почему-то не получается.при первой возможности скромно плюсану яндекс карточкой(сообщу в личке).Vetali
AlexM, Доброго времени. Вот какая проблемка обнаружилась. Вы говорили что если больше 14 часов идут отрицательные значения. Я над этим сильно не задумался видать. В изначальном файле если приход был раньше 10:00 скажем на час то да, считалось в минусе так как человек пришел раньше а не опоздал на 23 часа, исходя из этого штраф считался в минус так как человек таким образом в итоге мог отработать опоздания за другие дни и компенсировать штрафы. Например, 5 дней опоздания составляли 12 мин. на 6-й день человек вышел на час раньше и штраф получился -180 что выходит по нолям с 5-ю днями опозданий.Вот этот момент только можно вернуть обратно с небольшими пояснениями как что нужно изменить чтоб можно было при необходимости использовать один из этих вариантов? Е сли не ошибаюсь то изменения должны быть в этой строке: [vba]
AlexM, Доброго времени. Вот какая проблемка обнаружилась. Вы говорили что если больше 14 часов идут отрицательные значения. Я над этим сильно не задумался видать. В изначальном файле если приход был раньше 10:00 скажем на час то да, считалось в минусе так как человек пришел раньше а не опоздал на 23 часа, исходя из этого штраф считался в минус так как человек таким образом в итоге мог отработать опоздания за другие дни и компенсировать штрафы. Например, 5 дней опоздания составляли 12 мин. на 6-й день человек вышел на час раньше и штраф получился -180 что выходит по нолям с 5-ю днями опозданий.Вот этот момент только можно вернуть обратно с небольшими пояснениями как что нужно изменить чтоб можно было при необходимости использовать один из этих вариантов? Е сли не ошибаюсь то изменения должны быть в этой строке: [vba]
В макросе три строки, в которых проверка на отрицательную разницу времени. Одну из них вы показали. Чтобы не "ломать" код, можно вместо +1 сделать +N N - переменная. При N=1 будет обработка как сейчас, а при N=0 - как раньше В новом файле это сделано. N=1 В новом файле введена защита. Не знаю так вы хотели или по другому. Пароль снятия защиты - 123 Поставить можно запустив макрос в модуле1
В макросе три строки, в которых проверка на отрицательную разницу времени. Одну из них вы показали. Чтобы не "ломать" код, можно вместо +1 сделать +N N - переменная. При N=1 будет обработка как сейчас, а при N=0 - как раньше В новом файле это сделано. N=1 В новом файле введена защита. Не знаю так вы хотели или по другому. Пароль снятия защиты - 123 Поставить можно запустив макрос в модуле1AlexM
AlexM, Да, думаю то что нужно! ОГРОМНОЕ спасибо. Я так понимаю макрос Protect нужно запускать каждый раз при открытии файла вручную, иначе при вводе данных появляется ошибка:Нельзя установить свойство Locked класса Range/
AlexM, Да, думаю то что нужно! ОГРОМНОЕ спасибо. Я так понимаю макрос Protect нужно запускать каждый раз при открытии файла вручную, иначе при вводе данных появляется ошибка:Нельзя установить свойство Locked класса Range/Vetali
Не, я уже стесняюсь) более того думаю что дальше только сложнее. конечно предел мечтаний, это уже управление файлом, то есть менюшка где можно задать каждому сотруднику свое начало рабочего времени, так как один с 10 другой с 9 а третий с 9:45, тут же при необходимости менять размер штрафа за минуту который по умолчанию 3 и т.д. (не заморачивайтесь).а из простых действий в целях эстетичности можно оставить 1-2 пустые строки между последней записью и первым итогом, но это не принципиально мне и так все нравится, и так много сделано! Ах, вот еще что...Как бы сделать так чтоб один сотрудник не мог ввести более одной записи в день? а то ведь может случайно ввести 2 записи а итог посчитается как 2 опоздания за 1 день..
Не, я уже стесняюсь) более того думаю что дальше только сложнее. конечно предел мечтаний, это уже управление файлом, то есть менюшка где можно задать каждому сотруднику свое начало рабочего времени, так как один с 10 другой с 9 а третий с 9:45, тут же при необходимости менять размер штрафа за минуту который по умолчанию 3 и т.д. (не заморачивайтесь).а из простых действий в целях эстетичности можно оставить 1-2 пустые строки между последней записью и первым итогом, но это не принципиально мне и так все нравится, и так много сделано! Ах, вот еще что...Как бы сделать так чтоб один сотрудник не мог ввести более одной записи в день? а то ведь может случайно ввести 2 записи а итог посчитается как 2 опоздания за 1 день..Vetali
Сообщение отредактировал Vetali - Четверг, 07.02.2013, 18:42
Лично мне такая эстетика не понравилась, да и действия "простые", может быть сами справитесь. Честно говоря, мне код не очень нравится и причина в том, что состоит из кусочков, реализующих новые идеи. Если задача была поставлена сразу вся, то код был бы компактнее и выполнялся быстрее.
Если найдете ошибки, то постараюсь исправить. Новые идеи не принимаю.
Цитата (AlexM)
чтоб один сотрудник не мог ввести более одной записи в день
Чтобы сотрудник не ввел себя дважды я сделал, но он сможет ввести метку за другого. Еще можно ввести метку с ошибкой. По идее можно сделать проверку на наличие метки в списке или ввод в ячейку делать из выпадающего списка. Думаю, что идеи еще можно собирать, чтобы программа учитывала все нюансы. Во всяком случае, то что сделано дает представление практически неограниченных возможностях Excel, поэтому есть стимул его познавать.
Посмотрите файл.
Цитата (Vetali)
из простых действий в целях эстетичности
Лично мне такая эстетика не понравилась, да и действия "простые", может быть сами справитесь. Честно говоря, мне код не очень нравится и причина в том, что состоит из кусочков, реализующих новые идеи. Если задача была поставлена сразу вся, то код был бы компактнее и выполнялся быстрее.
Если найдете ошибки, то постараюсь исправить. Новые идеи не принимаю.
Цитата (AlexM)
чтоб один сотрудник не мог ввести более одной записи в день
Чтобы сотрудник не ввел себя дважды я сделал, но он сможет ввести метку за другого. Еще можно ввести метку с ошибкой. По идее можно сделать проверку на наличие метки в списке или ввод в ячейку делать из выпадающего списка. Думаю, что идеи еще можно собирать, чтобы программа учитывала все нюансы. Во всяком случае, то что сделано дает представление практически неограниченных возможностях Excel, поэтому есть стимул его познавать.AlexM
вы правы! хватило бы времени только... В любом случае вы очень много сделали и помогли.Спасибо. В последнем прикрепленном файле возникает такая проблема: вводится запись все считается и переходит на нижнюю строку чтоб ввести новую запись, это строка автоматически считается почему-то от 00:00 нужного времени и соответственно данные не верные.если запись ввести повторно то да, не позволяется, но остается пустая строка и я подозреваю что если следующая строка сравнивается с предыдущей где-нибудь в операциях или функциях, то тоже возникнет ошибка.
Цитата (AlexM)
стимул его познавать.
вы правы! хватило бы времени только... В любом случае вы очень много сделали и помогли.Спасибо. В последнем прикрепленном файле возникает такая проблема: вводится запись все считается и переходит на нижнюю строку чтоб ввести новую запись, это строка автоматически считается почему-то от 00:00 нужного времени и соответственно данные не верные.если запись ввести повторно то да, не позволяется, но остается пустая строка и я подозреваю что если следующая строка сравнивается с предыдущей где-нибудь в операциях или функциях, то тоже возникнет ошибка.Vetali
Ничего не понял. Опишите свои действия шаг за шагом и что получается. В файле есть 5 строк. Начинаем ввод в А6. Так как месяц другой, считаются Итоги и вставляется заголовок месяца. Теперь ввод делаем в А10. Теперь продолжайте вы. до появления 00:00
и можно приложить файл, в котором так получилось.
Ничего не понял. Опишите свои действия шаг за шагом и что получается. В файле есть 5 строк. Начинаем ввод в А6. Так как месяц другой, считаются Итоги и вставляется заголовок месяца. Теперь ввод делаем в А10. Теперь продолжайте вы. до появления 00:00
и можно приложить файл, в котором так получилось.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.