Возможно, кто-нибудь знает, как выполнить такие действия в VBA: У меня есть шаблон на одном листе и на втором. Таблица выглядит следующим образом:Excel VBA fufilling template с дополнительными строками
Unit Project Project Name Task Number Invoice Sum of Amount
304 136950 Name1 02.3 invoice1 156.45
304 136955 Name2 01.6 invoice1 22.35
Итак, когда я заполняю шаблон, мне нужно проверить, если блок именование то же самое, и если да, то дополнительная строка должна быть создана в шаблоне.
В настоящее время у меня есть макрос, который выполняет шаблон только для одной строки отдельно, и проблема для меня в том, что если я создаю чек, все еще из-за «Для каждого ...», я сталкиваюсь с проблема с созданием нового листа вместо строки.
Поскольку я совершенно новый в VBA, есть возможность помочь мне в проблеме, так что, например, если Единица одинакова на линиях 1+ (порядок, заданный единицей, поэтому не будет ситуация, когда единица повторяется после нескольких строк ниже), вместо создания нового листа с заполненным шаблоном будет создана новая строка в шаблоне?
Macro я сейчас:
Set myRange = Range(Sheets("Data").Cells(2, 1), Sheets("Data").Cells(2, 1).End(xlDown))
i = 1
For Each r In myRange.Cells
Sheets("template").Select
Sheets("template").Copy Before:=Sheets(1)
Sheets("template (2)").Select
Sheets("template (2)").Name = "Invoice " & i
Range("C1:D1").Select
ActiveSheet.Cells.Replace What:="{Unit}", Replacement:=r.Offset(0, 0), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
ActiveSheet.Cells.Replace What:="{pr number}", Replacement:=r.Offset(0, 1), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
ActiveSheet.Cells.Replace What:="{pr name}", Replacement:=r.Offset(0, 2), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
ActiveSheet.Cells.Replace What:="{task nr}", Replacement:=r.Offset(0, 3), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
ActiveSheet.Cells.Replace What:="{invoice number}", Replacement:=r.Offset(0, 4), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
ActiveSheet.Cells.Replace What:="{amount}", Replacement:=r.Offset(0, 5), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
i = i + 1
Next r
Диапазоны, которые должны быть скопированы в виде новых линий, которые хранятся здесь:
Range("A24:H29").Select 'templated data, which should be copied if new row needed and then here I'm fulfilling info from table
Selection.Copy
Range("A31").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = j + 1 'line number
Range("A33").Select
Вы хотите заполнить лист шаблона уникальными значениями * Единицы * (одна строка в листе шаблона равна одному уникальному * Единице * в таблице)? Например, есть 10x Unit '304', 3x Unit' 308' и 20x Unit '401', у шаблона будет 1 строка для каждого' 304' '308'' 401'? Это проблема? –
Привет, Да, точно, поэтому данные для шаблона перемещаются на новый лист и для каждого уникального модуля Мне нужно добавить дополнительные строки в шаблон с выполненными данными из таблицы выше –
Так как из вашего примера это будет 10 строк в 304, следующий шаблон 3x308 и т. д. –