【发布时间】:2020-08-11 17:39:24
【问题描述】:
我正在创建一个 Excel 工作簿,该工作簿将使用 VBA 将两个过滤器应用于一张请求的项目。 Q 列包含“硬件”或“智能手机”,R 列包含“是”或“否”。其他字段的内容无关紧要。过滤器将应用于“硬件”列 Q 和“否”列 R。对于满足这两个条件的每个项目,它们将被粘贴到另一个选项卡上的特定行 A11 中,该选项卡包含 A10 中的标题行。在已粘贴的行下方,我想要两个空白行,然后是一行文本“Your Text Here”,并且将重复标题行。最后,R 列过滤器将切换为“是”,而 Q 列过滤器保持在“硬件”上。此过滤器生成的行将被复制到第二个标题行的下方。
硬件选项卡将包含以下内容,
- A1-A9 - 空白,内容稍后添加。
- A10 - 数据的标题行,
- A11-A(X) - 列 Q =“硬件”且列 R =“否”的数据行,
- A(X+1)-A(X+2) - 空白行,
- A(X+3) - “你的文字在这里”,
- A(X+4) - 数据的标题行,
- A(X+5) - 列 Q =“硬件”且列 R =“是”的数据行。
我已经改编了我在这个网站上找到的 VBA 脚本,非常感谢 Siddharth Rout。 How to copy a line in excel using a specific word and pasting to another excel sheet?
当我运行宏时,它会正确应用两个过滤器并将正确的行复制到“硬件”选项卡中。但是我希望将它粘贴到标题行下方的单元格 A11 中,但数据实际上是覆盖它并复制到单元格 A10 中。
因为我无法停止覆盖我的标题行或将第一组放在正确的位置,所以我不确定如何在其下方添加我需要的内容以及如何确定第二组的位置。
我尝试更改 'After:=.Range("A11"), _' 中的值,但我很可能误解了它的作用。我希望它始终从 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
非常感谢任何可能回复并道歉的人,如果我的总结可以更好的话。
【问题讨论】:
标签: excel vba autofilter