Условное копирование, вставка, удаление между отсутствующими данными листов

#excel #vba #conditional-statements #copy-paste #worksheet

#excel #vba #условные операторы #копировать-вставить #рабочий лист

Вопрос:

Я унаследовал рабочую книгу, которая месяцами подвергалась злоупотреблениям (неправильный ввод данных, плохое вырезание и вставка, дублирование и т.д.). Я почти закончил сортировку данных, но для предотвращения подобных проблем я пытаюсь автоматизировать часть процесса. Я новичок в VBA и не могу понять, почему мой код не работает. Есть несколько листов, которые отслеживают приложение через наш новый клиентский процесс. Каждый рабочий лист имеет те же пятнадцать столбцов, метаданные в первых 10 строках (= количество сумм) и заголовки в 11-й строке. Когда мы получаем интерес к вступлению в нашу организацию, некоторые простые данные вводятся в столбцы A-D и L-O включительно. Я хочу, чтобы определенная строка переходила на следующий рабочий лист, когда вводится дата, указывающая на то, что этап процесса завершен. Например, когда клиент возвращает форму заявки, дата вводится в столбец G, а конкретная строка перемещается на следующий лист и удаляется из оригинала. Ввод даты работает, но столбцы L-O не копируются. ПОМОГИТЕ!

Код, который я использую, является:

 Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("G12:G100" amp; Range("A" amp; Rows.Count).End(xlUp).Row)) Is Nothing And Target.Cells.Count = 1 Then
    
        If IsDate(Target.Value) = True Then
        
            Range(Cells(Target.Row, "A"), Target).Copy Sheets("Awaiting Interview").Range("A" amp; Rows.Count).End(xlUp).Offset(1, 0)
            Target.EntireRow.Delete
            
        End If
        
    End If
    
End Sub
  

Заранее благодарю.

AlVBA

Комментарии:

1. Подумайте о том, что представляет собой диапазон Range(Cells(Target.Row, "A"), Target) .

2. Также обратите внимание, что, Range("G12:G100" amp; Range("A" amp; Rows.Count).End(xlUp).Row) вероятно, должно быть Range("G12:G" amp; Range("A" amp; Rows.Count).End(xlUp).Row) .

3. Спасибо BigBen, у меня был (G12: G) и не могу вспомнить, почему я его изменил. Это изменение не решило проблему вставки.

4. Правильно, потому что Range(Cells(Target.Row, "A"), Target) включает только столбцы от A до G.

5. @BigBen OIC, я подозревал это, но я недостаточно свободно владею VBA, чтобы знать, как изменить свой код. я безуспешно играл с .entirerow. Я хочу, чтобы столбец G проверялся до тех пор, пока не будет введена дата, затем вся строка вырезана и вставлена. У вас есть решение, которым вы могли бы поделиться?