Я создаю книгу Excel, которая будет использовать VBA для применения двух фильтров к листу запрошенных элементов. Столбец Q содержит либо «Оборудование», либо «Смартфон», а столбец «R» - «Да» или «Нет». Содержимое других полей не имеет значения. Фильтр будет применен к столбцу Q для «Аппаратного обеспечения» и столбцу R для «Нет». Для каждого элемента, который соответствует обоим критериям, они будут вставлены в указанную строку c, A11, на другой вкладке, которая содержит строку заголовка в A10. Ниже вставленных строк я бы хотел две пустые строки, затем строку текста «Ваш текст здесь», и строка заголовка будет повторена. Наконец, фильтр Column R будет переключен на «Да», а фильтр Column Q останется на «Hardware». Строки, созданные этим фильтром, будут скопированы ниже этой второй строки заголовка.
Вкладка «Оборудование» будет содержать следующее:
- A1-A9 - пусто, содержимое будет добавлено позже.
- A10 - строка заголовка для данных,
- A11-A (X) - строки данных со столбцом Q = "Hardware" и столбцом R = "No",
- A (X + 1) -A (X + 2) - пустые строки,
- A (X + 3) - «Ваш текст здесь»,
- A (X + 4) - заголовок строка для данных,
- A (X + 5) - строки данных со столбцом Q = "Аппаратное обеспечение" и столбцом R = "Да".
Я адаптировал сценарий VBA который я нашел здесь на этом сайте, большое спасибо Сиддхарту Рауту. Как скопировать строку в Excel, используя указанное c слово и вставив ее в другой лист Excel?
Когда я запускаю макрос, он правильно применяет два фильтра и копирует правильные строки на вкладку «Оборудование». Однако я хочу, чтобы он был вставлен в ячейку A11 под строкой заголовка, но данные фактически перезаписывают это и копируют в ячейку A10.
Поскольку я не могу перестать перезаписывать строку заголовка или получить первый набор в нужном месте, я не уверен, как затем добавить то, что мне нужно, под ним, а также как определить, где находится второй набор будет go.
Я попытался изменить значение в 'After: =. Range ("A11"), _', но я, вероятно, неправильно понимаю, что он делает. Я хочу, чтобы он всегда go начинался со строки A11 и не касался ничего в строках 10 и выше, даже если они не заполнены.
Dim wb1 As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
Dim copyFrom As Range
Dim lRow As Long
Set wb1 = ThisWorkbook
Set ws1 = wb1.Worksheets("Raw")
With ws1
.AutoFilterMode = False
lRow = .Range("Q" & .Rows.Count).End(xlUp).Row
With .Range("Q1:R" & lRow)
.AutoFilter Field:=1, Criteria1:="Hardware" '-> Hardware Items
.AutoFilter Field:=2, Criteria1:="No" '-> Not Business Continuity
Set copyFrom = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
End With
.AutoFilterMode = False
End With
'-> Destination
Set ws2 = wb1.Worksheets("Hardware")
With ws2
If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
lRow = .Cells.Find(What:="*", _
After:=.Range("A11"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
Else
lRow = 1
End If
copyFrom.Copy .Rows(lRow)
End With
wb1.Save
End Sub
Большое спасибо всем, кто может ответить, и приносит извинения, если моё резюме будь лучше.