Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2016, 12:31   #1
mrMad-Cat
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 33
Радость Макрос для учёта времени работы в файле excel

Коллеги, добрый день.
Есть задумка и потребность наладить автоматический учёт времени работы в excel файле.
Базовая концепция очень простая:
При открытии книги на отдельном листе создаётся строка (сессия) где в первой колонке вбивается имя юзера, во второй - текущая дата и время.
При сохранении в третью колонку заносится время сохранения, в четвертой колонке формулой прописывается разница во времени и сразу стартует аналогичная новая строка.
Разница времени и будет временем работы.
И легкое усложнение - должен работать постоянный таймер обратного отсчёта после последнего действия (наверное последнего клика мышкой в данном файле) например на 15 минут после которого автоматом происходит закрытие очередной строки (сессии). При возвращении к файлу и первом клике сразу начинает писаться новая сессия.

По-моему должно быть довольно просто и удобно.
Возможно кто-то делал что-то подобное? Буду очень благодарен за любую помощь и советы, так как у меня знание VBA на самом начальном уровне.
mrMad-Cat вне форума Ответить с цитированием
Старый 07.06.2016, 15:44   #2
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Т.е. вы предлагайте мне варианты нахаляву, а я буду сидеть и пальцы гнуть: это не то, а тут надо какая-то доработка.. Так? А то изначально: "у меня знание VBA на самом начальном уровне."
P.S. платный раздел подсказать?
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 07.06.2016, 15:48   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

а если макросы отключены?
Кто помешает пользователю открыть файл, отредактировать, сохранить, закрыть?
или, ещё хуже, открыть файл (с выключенными макросами) и потом надолго уйти (спать)?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.06.2016, 16:08   #4
mrMad-Cat
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 33
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
Т.е. вы предлагайте мне варианты нахаляву, а я буду сидеть и пальцы гнуть: это не то, а тут надо какая-то доработка.. Так? А то изначально: "у меня знание VBA на самом начальном уровне."
P.S. платный раздел подсказать?
Во времена когда я помогал людям кодить такие сообщения как Ваше считались грубым оффтопиком и наказывались модераторами. Не хотите помогать - не нужно. Хотите заработать - общайтесь как с клиентом - пишите уважительно в личку с предложениями. Зачем срать в теме, чтобы потом будущие поколения заходя через поиск вместо ответа на вопрос находили один спам?
mrMad-Cat вне форума Ответить с цитированием
Старый 07.06.2016, 16:13   #5
mrMad-Cat
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 33
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а если макросы отключены?
Кто помешает пользователю открыть файл, отредактировать, сохранить, закрыть?
или, ещё хуже, открыть файл (с выключенными макросами) и потом надолго уйти (спать)?
Речь не про скрытое слежение за пользователями. Это для себя чтобы потом понимать трудозатраты. Соответственно и макросы будут включены, и корректировать никто не будет. А открыть файл и уйти потенциально ничем не грозит, так как будет механизм, скажем так, автозавершения сессии через 15 минут бездействия.

Пока я начал вот так:
Код:
Sub Worksheet_Change(ByVal Target As Range)
Application.Wait (Now + TimeValue("0:15:00"))
End Sub
mrMad-Cat вне форума Ответить с цитированием
Старый 07.06.2016, 16:39   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
По-моему должно быть довольно просто и удобно
по моему, достоинства описанного решения видите только Вы один
а остальные (не понимая для чего это нужно):
- видят сплошную дырявость этой автоматической "системы учета времени"
лично у меня то, что я прочитал, никак не связывается с понятием "система учета времени"
- не видят смысла заниматься этой удивительной системой

полагаю, только наличие информации о бюджете данной затеи может вызвать хоть какой-то интерес к ней
поэтому совет такой:
ветка "Фриланс" с обьявлением Вашего представления о стоимости данного проекта
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 07.06.2016, 16:51   #7
mrMad-Cat
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 33
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
по моему, достоинства описанного решения видите только Вы один
а остальные (не понимая для чего это нужно):
- видят сплошную дырявость этой автоматической "системы учета времени"
лично у меня то, что я прочитал, никак не связывается с понятием "система учета времени"
- не видят смысла заниматься этой удивительной системой

полагаю, только наличие информации о бюджете данной затеи может вызвать хоть какой-то интерес к ней
поэтому совет такой:
ветка "Фриланс" с обьявлением Вашего представления о стоимости данного проекта
Спасибо за Ваше мнение, тогда было бы очень интересно услышать, что именно Вы связываете с понятием "система учёта времени".
Про фриланс спасибо, я в курсе где его найти.
mrMad-Cat вне форума Ответить с цитированием
Старый 07.06.2016, 17:15   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

может быть, устроит универсальное решение.
погуглите системы учёта рабочего времени.
например,

NkTimeTracker — простая и удобная программа для учета времени работы за компьютером

Программы для учёта рабочего времени
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.06.2016, 17:25   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

понимаете, открыть файл сегодня, а сохранить и закрыть через 3 месяца - это не значит, что с файлом работали более 2 тыс. часов

понимаете, когда Вы просто просматриваете (анализируете) данные, копи-пастите данные с текущего файла в другой, строите отчет по данным текущего файла в другом, просто перебираете какой тип диаграммы более точно отобразить суть данных и т.д. и т.п. за все это время ДАННЫЕ в файле НЕ ИЗМЕНИЛИСЬ, а работа с файлом ведется!

чтобы советовать КАК УЧИТЫВАТЬ я должен понимать ЧТО НУЖНО УЧИТЫВАТЬ???

я не умею читать мысли, умею читать только буквы и цифры)
поэтому не имею малейшего представления что Вы собрались учитывать и ничем больше не могу Вам помочь
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 08.06.2016, 18:38   #10
mrMad-Cat
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 33
По умолчанию

Serge_Bliznykov, этот вариант думал в начале но отмёл в силу не очень большой удобностью использования. Мне нравится когда эта информация хранится прямо в нужном файле. К тому же ничего другого мне не нужно, а там в довесок куча всяких возможностей.

IgorGO, Это был предмет к обсуждению когда я начинал тему. Сейча я ограничился проверкой на выбор другой ячейки/области. В 99% случаев пользователь выбирает разные ячейки при всех махинациях с файлом. Людей которые не "клацают" по ячейкам в процессе размышлений я не встречал.

Вот мой код на сегодня:
ЭтаКнига:
Код:
Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    'После каждого последнего выделения новой ячейки
    '1. Убиваем все активные Application.OnTime
    On Error Resume Next
    Application.OnTime Endtime, "Close_Session", , False
    '3. Если последняя сессия не закрыта, ничего не делаем но начинаем обратный отсчёт, если время выходит - закрываем сессию
    If Worksheets("LOG").Cells(2, 3).Value = vbNullString Then
        Endtime = Now + TimeValue("00:00:05")
        Application.OnTime Endtime, "Close_Session", , True
    '4. Если последняя сессия закрыта, начинаем новую и начинаем обратный отсчёт, если время выходит - закрываем сессию
        Else
        Call Start_Session
        Endtime = Now + TimeValue("00:00:05")
        Application.OnTime Endtime, "Close_Session", , True
    End If
End Sub

Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    'Закрытие сессии при сохранении книги
    'Если последняя сессия не закрыта - закрываем и начинаем новую, если закрыта то ничего не делаем
    If Worksheets("LOG").Cells(2, 3).Value = vbNullString Then
        Call Close_Session
        Call Start_Session
    End If
End Sub

 
Sub Workbook_Open()
    'Открытие новой сессии при открытии книги
    Call Start_Session
End Sub
Module1:
Код:
Sub Start_Session()
   'Начинаем новую сессию:
   '1. Вставляем новую вторую строку и копируем форматы снизу
    Rows(2).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
   '2. Заносим имя пользователя и дату-время начала сессии
    Worksheets("LOG").Cells(2, 1) = Environ("USERNAME")
    Worksheets("LOG").Cells(2, 2) = Format(Now, "dd.mm.yyyy hh:mm:ss")
End Sub
Sub Close_Session()
   'Закрываем последнюю сессию
    Worksheets("LOG").Cells(2, 3) = Format(Now, "dd.mm.yyyy hh:mm:ss")
    Worksheets("LOG").Cells(2, 4) = Format("=C2-B2", "[S]")
End Sub
В целом работает, но есть ряд не решенных проблем:
1) мой код должен остановить предыдущие OnTime события (в самом начале кода), но не работает почему-то
2)Необходимо сделать третью ячейку с формулой высчитывающей длительность сессии. Длительность высчитывает, но формат не получается задать в секундах.
3) и самая ужасная проблема - после каждой новой записи пропадает возможность отменить последние действия. Это как-то лечится?
mrMad-Cat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение времени работы для установления стационарного режима очередей / GPSS Deadstock Помощь студентам 0 27.02.2014 22:51
График учёта рабочего времени Dzzima Microsoft Office Excel 2 02.10.2012 15:52
для работы написать макрос для Excel и Word.... smanna Microsoft Office Excel 2 30.11.2010 12:43
Макрос для одновременной работы с word и excel Virtour Microsoft Office Excel 1 20.07.2010 09:29
Формула или макрос для работы с массивом данных dondavis Microsoft Office Excel 3 21.09.2009 05:14