Страницы: 1
RSS
Макрос: замена уже имеющихся данных в строке на новые, Помогите доработать макрос
 
Код
Sub Add_Sell()
    Worksheets("Форма воода для снабжения").Range("A19:K19").Copy                                   'копируем строчку с данными из формы
    n = Worksheets("Готовые операции").Range("A100000").End(xlUp).Row                               'определяем номер последней строки в табл. Готовые изделия
    Worksheets("Готовые операции").Cells(n + 1, 1).PasteSpecial Paste:=xlPasteValues                'вставляем в следующую пустую строку
    Worksheets("Форма воода для снабжения").Range("C3").ClearContents                               'очищаем форму
End Sub

Помогите доработать макрос.
Макрос копирует сформированную строчку и вставляет ее в таблицу на другой лист "Готовые изделия" в последнюю строчку. Строка которая копируется содержит дату и время. Необходимо что бы, в случае если строчка с тем же порядковым номером уже была в таблице на листе "Готовые изделия" то новая строчка с новой датой и временем заменяла старую, а не вставала на последнюю строчку, если же такой строчки нет, то вставала на последнюю строчку.
Для примера залил файл с макросом.
Спасибо.
 
у вас в таблице Готовые операции до чёрта строк с одинаковым порядковым номером.
Какую заменять?
 
Цитата
VideoAlex написал:
у вас в таблице Готовые операции до чёрта строк с одинаковым порядковым номером.Какую заменять?
Это их сейчас много, а если будет макрос заменять уже имеющуюся с таким порядковым номером, то она там всегда будет одна.
Возьмем за пример "Палец" с порядковым номером "6". (в таблице из примера видно что у этой позиции статус разный, он менялся с учетом времени, и строчки добавлялись друг под друга). Снабженец сперва поставил статус "Поиск", потом поменял на статус "Оплата", следовательно новая строчка со статусом "Оплата" встала под строчку со статусом "Поиск", а если бы макрос менял позиции, то новая строчка со статусом "Оплата" заменила строчку со статусом "Поиск" и тогда в таблице осталась бы только одна строчка с таким порядковым номером, которая в дальнейшем бы так же заменилась на строчку с новым статусом.  
 
Код
Sub Add_Sell()
    nomer = Worksheets("Форма ввода для снабжения").Cells(19, 2).Value
    Set Rng = Worksheets("Форма ввода для снабжения").Range("A19:K19")
'    Rng.Copy                                    'копируем строчку с данными из формы
    n = Worksheets("Готовые операции").Range("A100000").End(xlUp).Row 'определяем номер последней строки в табл. Продажи
    For i = 1 To n
    If nomer = Worksheets("Готовые операции").Cells(i, 2) Then
        Rng.Copy
        Worksheets("Готовые операции").Cells(i, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Rng.ClearContents
        Exit Sub
    End If
    Next i
Rng.Copy
     Worksheets("Готовые операции").Cells(n + 1, 1).PasteSpecial Paste:=xlPasteValues           'вставляем в следующую пустую строку
    Worksheets("Форма ввода для снабжения").Range("C3").ClearContents                                   'очищаем форму
End Sub
Изменено: VideoAlex - 13.07.2018 16:24:20
 
VideoAlex,Спасибо. Все работает. Только убрал у себя "Rng.ClearContents", т.к. после нажатия на кнопку ввода, форма очищается, и ComboBox начинает ругаться на пустое значение в ячейке.
 
У меня к вам еще одна просьба. Можно ли как то у статуса выставить приоритеты (иерархию статусов). Чтобы эксель выдавал ошибку в случае если статус ставится не по порядку.

Пример: Появилась потребность производства в материале, снабженец выставил статус материала - "Поиск", по иерархии следующий статус должен быть либо "Согласование" либо "Оплата", но никак не "Поставка" или "Получено". Т.е. хотелось бы чтобы эксель не давал вставить строку с материалом со статусом "Получено" если в таблице на листе "Готовые операции" уже имеется строка со статусом более высшем по иерархии, либо имеется строка со статусом после которого должен стоять еще какой то статус прежде чем можно было бы поставить статус "Получено".
 
можно. для этого нужно знать вашу иерархию статусов
------------------------------------------------------------------------------------------------------
Цитата
lexer написал:
убрал у себя "Rng.ClearContents"
вставьте тогда вместо нее
Код
Worksheets("Форма ввода для снабжения").Range("C3").ClearContents
не знаю для чего, но видимо она вам нужна зачем-то
Изменено: VideoAlex - 16.07.2018 14:55:49
 
Цитата
VideoAlex написал:
можно. для этого нужно знать вашу иерархию статусов
Низшая степень - Без статуса
Средняя степень - Поиск ; Отгрузка с ЦС ; Изготовление; Под заказ; Согласование; Замена; Получено с ЦС
Высшая степень - Оплата; Оплачено;Отгрузка; В пути; Получено
 
что-то я не совсем... Какая-то у вас не чёткая вертикаль власти
можно ли без статуса менять на оплачено?
можно ли поиск менять на согласование? оплата на получено? изготовление на оплачено?
 
Цитата
VideoAlex написал:
что-то я не совсем... Какая-то у вас не чёткая вертикаль власти
Лояльная вертикаль власти))

Низшую степень можно менять как на низшую так и на среднюю, но нельзя на высшую. Среднюю можно менять на среднюю и высшую, но нельяза менять на низшую. Ну и высшую можно менять только на высшую.
Цитата
VideoAlex написал:
можно ли без статуса менять на оплачено?можно ли поиск менять на согласование? оплата на получено? изготовление на оплачено?

"Без статуса"(низшая степень) на "оплачено"(высшая степень) менять нельзя. "Поиск" на "согласование" можно, ибо это одна степень, "оплата" на "получено"  и "изготовление" на "оплачено" аналогично.
Изменено: lexer - 18.07.2018 08:54:10
Страницы: 1
Наверх