#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 проверялся до тех пор, пока не будет введена дата, затем вся строка вырезана и вставлена. У вас есть решение, которым вы могли бы поделиться?