Страницы: 1 2 След.
RSS
Автоматический перенос строки на другой лист при условии
 
Помогите, пожалуйста! Вторую неделю не могу найти вариант решения... Есть "База", нужно, чтобы при введении слова договор в ячейку "Статус" вся строка перенеслась на другой лист "Д.Газ" (или хотя бы скопировалась автоматически на другой лист). За ранее благодарю всех за помощь.
 
В код листа "База":
Скрытый текст

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
А как это ввести в код листа?
 
ПКМ по имени листа, исходный текст. Файл сохранить в двоичном или формате поддерживающем хранение макросов. И загляните в ПРИЁМЫ, там про макросы тоже есть информация.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
не работает :(. может я что-то не правильно сделал... Могу попросить Вас в тот файл, что я загрузил вставить этот макрос?
 
Пожалуйста.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, код не срабатывает, если вписать слово договор не последовательно, а, например, сразу ниже на десять ячеек... Просто наблюдение, ибо учусь :oops:
 
спасибо! работает! :) , но JayBhagavan прав - если вводить не последовательно - не работает. Это можно исправить?
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Set trgt_rng = Range([D2], [D2].End(xlDown))
    If Target.Count = 1 Then
       If Target.Value = "Договор" Then
            Set out_rng = Worksheets("Д.Газ").[A1].Offset(Cells.Rows.Count - 1).End(xlUp).Offset(1)
            Target.EntireRow.Copy out_rng
            Application.CutCopyMode = False
        End If
    End If
End Sub
 
Возможно, не лучшее решение, ибо могут возникнуть ошибки. Но вроде работает, если вводить только слово Договор.
 
Вот Ваш пример:
 
AnatoliyAN, поинтересуйтесь у знатоков, как модифицировать код, чтобы можно было удалять или изменять перенесенную строку. Например, если вдруг договор отменился... тогда нужно будет строку удалить, например, по другому кодовому слову "Отмена" с поиском ее на листе Д.Газ. Ну, а там, сами смотрите...
 
Ура!!! Спасибо. Работает!!! Вы мне ОЧЕНЬ помогли :)
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Set trgt_rng = Range([D2], [D2].End(xlDown))
    If Not Intersect(trgt_rng, Target) Is Nothing And Target.Cells(1).Value = "Договор" Then
        Set out_rng = Worksheets("Д.Газ").[A1].Offset(Cells.Rows.Count - 1).End(xlUp).Offset(1)
        Target.EntireRow.Copy out_rng
        Application.CutCopyMode = False
    End If
End Sub

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
AlexTM написал:... как модифицировать код, чтобы можно было удалять или изменять перенесенную строку
Єто было бы вообще идеально, еслибы они автоматически удалялись при таком условии...
 
AnatoliyAN, опишите какое(ие) поле(я) являются идентификаторами записи и тогда можно будет и отмену реализовать.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
AnatoliyAN, сия заслуга JayBhagavan
JayBhagavan, наверное, индикатором записи/удаления будет одно и то же поле... Но вопрошающий знает наверняка  :)
 
Всем, здравствуйте! Благодарю Вас за неравнодушие к моей проблеме! По поводу индикатора: колонка "статус". Наверное самое удобное, чтобы при внесении в ячейку колонки "статус" слова "договор" вся строка копируется в лист "Д.Газ", а при удалении из этой ячейки слова "договор" скопированная строка тоже автоматически удаляется с листа "Д.Газ"
 
Здравствуйте!
Тема очень актуальна. Уже внедряю этот макрос. Только мне нужен захват не всей строки, а нескольких ячеек в строке с индикатором.
Если Вам не трудно, подскажите новичку как в коде это прописать. Например, нужен отбор из листа "База" в лист "Д.Газ" только инфы со столбцов Наименование и Инфо.
Спасибо.
 
AnatoliyAN, попробую ещё раз донести до Вас свою мысль, т.к. моя формулировка, увы, не понятна Вам осталась. Макрос скопировал некую строку, если вместо договор Вы укажете отмена, например, то макрос по полю "№" будет удалять строку? Поле "№" всегда уникально для каждой записи? А вообще, это тема помощи, а не работа, потому старайтесь и сами хоть что-то сделать.

Cors, замените строку:
Код
Target.EntireRow.Copy out_rng
на, например, такое:
Код
range("a" & Target.row & ",c" & Target.row & ",n" & Target.row).Copy out_rng
Не проверял, потому тестируйте.
Изменено: JayBhagavan - 23.07.2015 16:13:45 (забыл .Copy в примере написать)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, большое спасибо! Все работает. Сейчас буду затачивать под свою таблицу.
По ходу надо углубляться в VBA, уж больно полезное.

Пользуясь добротой опытных пользователей и своей нескромностью так-же спрошу:
1) В данном примере макрос работает, если в определенной ячейке ввести "Договор", а если ячейки уже содержат это слово, можно ли заставить перебрать весь диапазон?
2) Возможно ли настроить макрос, чтоб он реагировал не на ввод текста в ячейке, а например, на условное форматирование(закрашивание цветом) в этой ячейке?
Спасибо.



 
 
Cors, не за что. Лучше не злоупотреблять добротой - это приводит к нарушению правил. (один вопрос - одна тема)
Скрытый текст

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
как то очень мне это знакомо.
что там было не так?
Изменено: китин - 23.07.2015 17:54:13
Вполне такой нормальный кинжальчик. Процентов на 100
 
Здравствуйте!
Огромное спасибо за Ваши подсказки, многие мне очень хорошо помогли.
Но у меня так и не получается перенести из одного листа (Заявки) в другой (Выдачи) не всю строку, а только ее часть ( из D (Заявки) - в C (Выдачи), из F (Заявки) - в H (Выдачи), из G (Заявки) - в I (Выдачи)). Все работает при смене статуса (Ячейка H (Заявки)).
Огромная просьба помочь в данной ситуации. Заранее большое спасибо!
 
icemen, здравия.
Цитата
icemen написал:
( из D (Заявки) - в C (Выдачи), из F (Заявки) - в H (Выдачи), из G (Заявки) - в I (Выдачи)). Все работает при смене статуса (Ячейка H (Заявки)).
Сдаётся мне, что Вы что-то путаете, но сделал почти так как просили - не делал перемещение, а только копирование, чтобы Вы поняли так или нет Вы хотели. В код листа "Заявки":
Код
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim wbf As Worksheet, wbd As Worksheet, c_row&, l_row&
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("H:H")) Is Nothing Then
        If Target.Value = "ЗАКР" Then
            Application.EnableEvents = False
            c_row = Target.Row
            Set wbf = ThisWorkbook.Worksheets("Заявки")
            Set wbd = ThisWorkbook.Worksheets("Выдачи")
            wbd.Range("Таблица2[#Totals]").ListObject.ListRows.Add
            l_row = wbd.Range("A1").End(xlDown).Row + 1
            wbd.Range("A" & l_row).FillDown
            wbd.Range("C" & l_row).Value = wbf.Range("D" & c_row).Value
            wbd.Range("H" & l_row).Value = wbf.Range("F" & c_row).Value
            wbd.Range("I" & l_row).Value = wbf.Range("G" & c_row).Value
            Application.EnableEvents = True
        End If
    End If
End Sub

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Не знаю сейчас правильно Вас понял или нет, но я ПКМ на вкладке "Заявки", Исходный текст в окно вставил код, который вы прислали, сохранил и пру проставлении статуса ЗАКР у меня выдает ошибку. Извините, если я делаю не правильно, в этом у меня мало опыта. Заранее еще раз большое спасибо.

wbd.Range("Таблица2[#Totals]").ListObject.ListRows.Add - в коде выделяется ЖЕЛТЫМ.
Изменено: icemen - 14.10.2015 19:17:59
 
icemen, приложите файл, в котором возникает ошибка, т.к. на примере у меня ошибок не было.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Пожалуйста...
 
icemen, пробуйте:
Скрытый текст

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Делаю как и описывал уже с новым кодом, но у меня все равно подгружаются не те данные в лист "Выдача". Скрин прикладываю.
Страницы: 1 2 След.
Читают тему
Наверх