Страницы: 1 2 След.
RSS
Поиск по артикулу с изменением статуса товара при считывании штрихкода
 
Здравствуйте нужна помощь.
Есть сканер штрих кода, который при сканировании копирует артикул в текущую выделенную ячейку.
Как сделать чтобы из таблицы автоматически находилась строка содержащая артикул и менялся его статус с 1 к примеру на 2 ?
все в файле примере.
Изменено: cliff99 - 05.12.2018 00:09:02
 
в модуль листа
Сканируйте в I1 или замените в коде на любой другой удобный для Вас адрес.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
спасибо , глянул.
только нужно чтобы весь столбец работал, не только I1.
И есть ли возможность сделать ещё один столбец , при сканировании в который значение менялось бы на другое к примеру 3.
Можно ли так сделать ?

upd.
со столбцом понятно. Просто поменял на Columns("I")
Буду туда сканировать.
Хотелось бы сделать ещё пару столбцов с другими статусами.
а вносить текст можно ?
Возможно такое ?
Изменено: cliff99 - 04.12.2018 19:11:32
 
cliff99, наверно возможно. Делайте по аналогии, т.к. мне не понятно как формируются Ваши доп. статусы и в каких они д.б. столбцах...

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Все работает. Сделал для другой колонки статус 3.
Можно ли чтобы копировало текст или хотя бы вот это: (48/19A)
В точности ну можно без скобок.
Я работаю на складе. Есть одна большая таблица со всем товаром.
Задача состоит в том чтобы сканером делать перемещения.
Изменено: cliff99 - 04.12.2018 19:30:58
 
Цитата
cliff99 написал: Можно ли чтобы копировало текст или хотя бы вот это: (48/19A)
Много чего можно. Опишите когда и куда?

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rngFind As Range
     For Each cell In Target   'проходим по всем измененным ячейкам
       If Not Intersect(cell, Range("B2:B100")) Is Nothing Then  'если изменененная ячейка попадает в диапазон A2:A100
            With cell.Offset(0, 2)         'вводим в соседнюю справа ячейку дату
               .Value = Now
               .EntireColumn.AutoFit  'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
            End With
       End If
    If Target.CountLarge = 1 Then
        If Not Intersect(Target, Columns("U")) Is Nothing Then
            Set rngFind = [A:A].Find(Target, , xlValues, xlWhole, , xlNext, False, False, False)
            If Not rngFind Is Nothing Then
                Application.EnableEvents = False
                Intersect([B:B], rngFind.EntireRow).Value = [2]
                Application.EnableEvents = True
            End If
        End If
    End If
    If Target.CountLarge = 1 Then
        If Not Intersect(Target, Columns("V")) Is Nothing Then
            Set rngFind = [A:A].Find(Target, , xlValues, xlWhole, , xlNext, False, False, False)
            If Not rngFind Is Nothing Then
                Application.EnableEvents = False
                Intersect([B:B], rngFind.EntireRow).Value = [1]
                Application.EnableEvents = True
            End If
        End If
    End If
    Next cell
End Sub

     
Вопросов 2.
Если их решить я буду очень счастлив.
1) Я добавил скрипт, чтобы автоматом ставилось время. Но он почему то работает только когда идёт правка вручную а не вашим скриптом.
2) Как сделать чтобы в столбец "наличие" ставились не только цифры, но и буквы
 
cliff99, правила: один вопрос - одна тема.Тема:
Цитата
cliff99 написал: поиск по артикулу с изменением статуса
давайте в рамках её и решать задачи. Для других вопросов - создайте тему(ы).

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Тогда вопрос один: эти скрипты реально связать , чтобы ставилось время изменения ? Или к вашему добавить ?
Так всё работает.  За это огромное спасибо.
Изменено: cliff99 - 04.12.2018 22:45:38
 
Реально.
 
Помогите если не трудно. А то всё что я мог сделать - так это то , что они не конфликтуют.
 
cliff99, Вы бы нашли время, да заглянули в раздел "Приемы" - там куча "полезняшек". Вот ссылка на одну из них, которая отвечает на Ваш вопрос. Да и поиском можно было найти: вопрос задавался неоднократно.
 
Так я и взял оттуда этот скрипт.
Но время ставится только когда идёт правка вручную.
Мне нужно же чтобы при изменении ячеек этим скриптом ставилась дата.
там же в теме и задавали вопрос:
Цитата
макрос срабатывает только в том случае если ввод в ячейку происходит в ручную, а не с помощью данной формулы
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rngFind As Range
     
    If Target.CountLarge = 1 Then
        If Not Intersect(Target, [I1]) Is Nothing Then
            Set rngFind = [A:A].Find(Target, , xlValues, xlWhole, , xlNext, False, False, False)
            If Not rngFind Is Nothing Then
                Application.EnableEvents = False
                Intersect([B:B], rngFind.EntireRow).Value = 2
                Application.EnableEvents = True
            End If
        End If
    End If
End Sub

Изменено: cliff99 - 04.12.2018 23:07:04
 
Событие Change на формулы не реагирует. И про какую формулу Вы говорите?
 
Да абсолютно любые. Дата ставится только при рукописном вводе.
А мне нужно , чтобы она ставилась при любом изменении ячейки.
 
Вы считали сканером ШК, в ячейку заносится значение - и это изменение будет отслежено процедурой Worksheet_Change. Ручной ввод тоже будет отслежен. Изменение, полученное формулой, этим событием не отслеживается. Нужно использовать другое - Worksheet_Calculate.

Только почему разговор про формулу, если Вы интересовались про сканер? Откуда всплыла формула?
Про формулу ещё такой момент: формула ведь отслеживает изменение в неких ячейках? Отслеживайте тогда при помощи  процедуры Worksheet_Change изменения в них.
 
Вы видимо не так поняли. Сканер заносит акртикул в столбец
Скриптом который мне дали выше изменяется значение определенной ячейки.
В данном случае с 1 на 2.
Но при этом время не проставляется.
гляньте файл примера.
оно ставится , только если вручную менять цифру.
должно работать так:
сканер выгрузил несколько артикулов в столбец который отвечает за продажу товара.
Соответственно меняется статус с 1 на 2. И проставляется время.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rngFind As Range
     
    If Target.CountLarge = 1 Then
        If Not Intersect(Target, [I1]) Is Nothing Then
            Set rngFind = [A:A].Find(Target, , xlValues, xlWhole, , xlNext, False, False, False)
            If Not rngFind Is Nothing Then
                Application.EnableEvents = False
                Intersect([B:B], rngFind.EntireRow).Value = 2
                Application.EnableEvents = True
            End If
        End If
    End If
End Sub
Изменено: cliff99 - 04.12.2018 23:43:23
 
Цитата
cliff99 написал:
Сканер заносит акртикул в столбец
Цитата
cliff99 написал:
сканер выгрузил несколько артикулов в столбец
Сканер ведь не сразу заполняет весь столбец? Вот в момент считывания в ячейку и ставьте время. Отслеживайте не изменение 1/2, а ввод со сканера.
 
cliff99,

События отключаются перед занесением  Application.EnableEvents = False а потом включаются. Это сделано для того, чтоб не зациклить ваш код.
Собственно  в это
Код
                Application.EnableEvents = False
                Intersect([B:B], rngFind.EntireRow).Value = 2
                Application.EnableEvents = True

надо добавить вставку времени в ячейку советующей строки.
По вопросам из тем форума, личку не читаю.
 
И Вы ничего не ответили про ФОРМУЛУ: откуда она взялась?
 
Цитата
БМВ написал:
надо добавить вставку времени в ячейку советующей строки.
Я не знаю как это сделать.
 
Цитата
Юрий М написал:
И Вы ничего не ответили про ФОРМУЛУ: откуда она взялась?
Да смысл такой что насчёт этого кода люди и писали что время не проставляется если изменение вносятся через формулу, любо скрипт.
Мне же нужно , чтобы время ставилось именно при изменении статуса с 1 на 2 или наоборот.
Но судя по всему никто не знает как это сделать.
 
Код
                Intersect([B:B], rngFind.EntireRow).Value = [2]
                rngFind.Offset(0, 3) = Date
                Application.EnableEvents = True
 
Цитата
Юрий М написал:
Мне же нужно , чтобы время ставилось именно при изменении статуса с 1 на 2 или наоборот
Вы читаете, что Вам пишут?
Цитата
Юрий М написал:
Отслеживайте не изменение 1/2, а ввод со сканера.
 
cliff99, в теме и первом сообщении нет ни малейшего упоминания о штампе времени, а правило форума - одна тема один вопрос
По вопросам из тем форума, личку не читаю.
 
Цитата
cliff99 написал:
время не проставляется если изменение вносятся через формулу
Про какую формулу Вы всё время говорите, нет никаких формул. Только вносите неразбериху.
 
Цитата
cliff99 написал:
Но судя по всему никто не знает как это сделать
Вот только не надо "на слабо" брать. Не любят здесь этого. См. #23.
 
Цитата
Юрий М написал:
Не любят здесь этого. См. #23.
я чего это? :-) cм #25. :-)
По вопросам из тем форума, личку не читаю.
 
Код
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rngFind As Range
      
    If Target.CountLarge = 1 Then
        If Not Intersect(Target, [I1]) Is Nothing Then
            Set rngFind = [A:A].Find(Target, , xlValues, xlWhole, , xlNext, False, False, False)
            If Not rngFind Is Nothing Then
                Application.EnableEvents = False
                Intersect([B:B], rngFind.EntireRow).Value = 2
                Application.EnableEvents = True
            End If
        End If
    End If
End Sub


Есть код , он меняет статус 1 на 2 . Когда копируешь значение в ячейку I1.
Если в столбце A найдётся такое значение как I1 то напротив его в столбце B поставится значение 2.
Как сделать чтобы в столбце C ещё ставилось и время ?
 
Цитата
cliff99 написал:
Как сделать чтобы в столбце C ещё ставилось и время ?
Я же Вам уже показал в #23... Только не в столбце С, а в столбце D.
Страницы: 1 2 След.
Наверх