我正在创建一个Excel工作簿,该工作簿将使用VBA将两个过滤器应用于所请求的项目表。 Q列包含“硬件”或“智能手机”,R列包含“是”或“否”。其他字段的内容无关紧要。过滤器将应用于“硬件”的Q列和“否”的R列。对于同时满足两个条件的每个项目,它们将被粘贴到另一个选项卡上的特定行A11中,该选项卡在A10中包含标题行。在粘贴的行下方,我想要两个空白行,然后是一行文本“ Your Text Here”,然后将重复标题行。最后,在将列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
非常感谢有人对我的总结会更好,他们可能会做出回应并表示歉意。
With ws2
copyFrom.Copy .Range("A11")
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
这会将范围粘贴到A11行中,然后您可以得到下一个最后一行。得到X by(将它定义为Dim lrow as Long)。
现在您有了包含数据(X)的最后一行。如您所述,下一个数据行是X + 5。首先通过[清除初始过滤器
ActiveSheet.AutoFilter.ShowAllData
因此,调整代码以使用条件“是”进行其他过滤,然后通过]进行粘贴>
With ws2 copyFrom.Copy .Range("A" & lrow + 5)