Страницы: 1
RSS
Подсчет промежутка времени ввода данных в ячейку
 
Добый день дорогие форумчане!
Прошу помочь с решением данной проблемы:
Нужно определить каким образом были введены данные в ячейку, вручную, вводя символ за символом либо сканированием штрих кода, ну или копированием и вставкой. Так как готовых функции в экселе нет, я думаю решение задачи лежит в плоскости подсчета промежутка времени от ввода первого символа и до нажатия клавиши Enter либо выхода из ячейки.  Все что заняло до секунды (или менее) это сканирование или копирование а все что более - ручной ввод. В итоге мне нужно заблокировать возможность ручного ввода дабы предотвратить ошибки данного ненадежного метода ввода данных.
Спасибо большое заранее!
 
Здравствуйте!
Поискал в нете и нашел такой вот макрос:
Код
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim iSource1 As Range, iSource2 As Range, iCell As Range
    
    Set iSource1 = Range("A1") '[A1]
    Set iSource2 = Intersect(Target, iSource1)
   
    If iSource2 Is Nothing Then Exit Sub
    If iCollection.Count = 0 Then iTimer = Now 'Time
    
    On Error Resume Next
    For Each iCell In iSource2
        If Not IsEmpty(iCell) Then
           iCollection.Add "", iCell.Address
        Else
           iCollection.Remove iCell.Address
        End If
    Next

    If iCollection.Count = iSource1.Count Then
       If DateDiff("s", iTimer, Now) > 1 Then
          MsgBox "Rucinoi vvod zapreshion!"
       End If
       iTimer = 0: Set iCollection = Nothing
    End If
End Sub

Я запускаю егоб но MsgBox ничего не выдает да и мне нужно чтобы кроме сообщения макрос не разрешил сам ввод либо стер введеные вручную данные.
 
Доброй ночи.
1. Во втором сообщении Вы забыли оформить код (есть специальная кнопочка в окне редактирования сообщения).
2. Код привели не целиком, там ещё одна строчка должна быть.
Код
Private iTimer As Date, iCollection As New Collection
3. Не хватает фала-примера.
4. Вот ещё примечания от автора макроса и источник http://www.msoffice-nm.ru/faq/macros/range5.htm
Цитата
Комментарий :
[*]Таймер запускается после ввода(редактирования/копирования) данных в любую из ячеек указанного диапазона.
[*]Удаление(очистка) данных игнорируется, но если такие действия должны учитываться, то просто оставьте только заполнение коллекции.
[*]В примере лимит времени задан как 60секунд(1минута), но это не является обязательным, проще говоря, Вы можете изменить его.
[*]Функция MsgBox используется только в качестве демонстрации.
[*]Если диапазон, за которым мы установили слежку, насчитывает много ячеек или время, отведённое пользователю на ввод, невелико, то вычисление временного интервала, имеет смысл осуществлять перед работой с коллекцией.
А по существу пока ничего ответить не могу, так как приходится самому делать файл-пример, пихать в него код и разбираться в нём, а уже спать пора.

P.S. И вообще тот макрос слегка о другом
Цитата
"Если Вам необходимо отслеживать сколько времени занял ввод данных в нужные ячейки (в примере это A1,C1,F1) и в зависимости от результатов, выполнять различные действия"
То есть он рассчитан на работу с диапазоном в iSource1 предполагается не одна ячейка, а несколько. И считается время от окончания правки первой ячейки в диапазоне, до окончания правки последней ячейки в диапазоне. Для одной ячейки этот код не сработает. Вообще не знаю как решать вариант с одой ячейкой.
Изменено: Wiss - 04.07.2020 04:03:10
Я не волшебник, я только учусь.
 
М.б. проще будет поставить защиту на лист, а сканирование и копирование/вставку делать через макрос? Тогда отпадет надобность в данном подходе.
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Можно с очень большой долей вероятности сказать - что пользователь рано или поздно начнёт вводить в ручную данные в другом файле/приложении и делать копи/паст. Может делать проверку на введённые данные? Создать справочник + выпадающий список? Ну или другие варианты.
 
Здравствуйте!

Wiss действительно я не понял что приложенный мной макрос (который я подправил по своему НЕразумению) проверяет интервал заполнения нескольких ячеек а не одну. Было бы так я и без макроса бы обошелсяб просто всталял бы отпечаток временни вода в ячейки и сравнивал самое большое значение с самым маленьким.

Михаил Лебедев подскажите как вводит данные сканирования в ячейку через макрос? DrillPipe прав, если дать возможность вводить копированием и вставкой, пользователь может не копировать данные из нужного списка а вводить где-то вручную а потом копировать и опять есть риск ошибки.

Проверка введенных данных возможна но так как проверочный список большой, появляется вероятность что код наименования будет неверным но совпадать с имеющимися кодами из списка.
Страницы: 1
Наверх