在VBA中将dynamic行从一个工作表复制到另一个工作表

我正在尝试从每个工作表复制到同一工作簿中称为“更新”工作表的行数。

行被定义为"Service Requests""Renewals"的关键词之间。

所以第1步:定义这些行号,第2步:将它们复制到续订表。

我碰到第二步的问题,不知何故,我不知道如何在复制命令中使用rownumber1和rownumber2。

任何帮助,将不胜感激。 谢谢!

在这里输入图像说明

 Sub test() Dim ws As Worksheet Application.ScreenUpdating = False Sheets("Renew").Activate For Each ws In Worksheets If ws.Name <> "Renew" Then For i = 1 To 100 Dim rownumber1 As Integer Dim rownumber2 As Integer If Range("A" & i).Text = "Service Requests" Then rownumber1 = i ElseIf Range("A" & i).Text = "Renewals" Then rownumber2 = i End If Next i 'copy rows between rownumber1 and rownumber2 to the renew sheet ws.Rows("rownumber1:rownumber2").EntireRow.Copy ActiveSheet.Paste Range("A65536").End(xlUp).Offset(1, 0) End If Next ws End Sub 

更新:

 Sub test2() Dim ws As Worksheet Dim rownumber1 As Integer Dim rownumber2 As Integer Dim FoundCell As Excel.Range Application.ScreenUpdating = False Sheets("Renew").Activate For Each ws In Worksheets If ws.Name <> "Renew" Then Set FoundCell = ws.Range("A:A").Find(what:="Service Requests", lookat:=xlWhole) If Not FoundCell Is Nothing Then rownumber1 = FoundCell.Row End If Set FoundCell = ws.Range("A:A").Find(what:="Renewals", lookat:=xlWhole) If Not FoundCell Is Nothing Then rownumber2 = FoundCell.Row End If 'copy renewals to the renewalsummary ws.Rows(rownumber1 & ":" & rownumber2).EntireRow.Copy ActiveSheet.Paste Range("A65536").End(xlUp).Offset(1, 0) End If Next ws End Sub 

你在找什么是:

 ws.Rows(rownumber1 & ":" & rownumber2).EntireRow.Copy 

虽然,还有一些其他的事情要考虑你的代码。 这可能是一个正在进行的工作,所以我只回答你的问题,但是:

  • 你的循环每次都会返回第100行,所以我很好奇你的循环是什么。
  • 你不应该在一个循环中DIM,因为你只能声明一个variables一次,循环会尝试每次都这样做,并应该抛出一个错误(用你的wsvariables来减less你的rownumbervariables)。
  • 为什么循环到100? 您应该循环到值列表的末尾。

回复编辑

它看起来不错。 主要的是它的工作原理。 虽然我会改变这个:

 ActiveSheet.Paste Range("A65536").End(xlUp).Offset(1, 0) 

对此:

 ActiveSheet.Paste Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) 

硬编码的值不是非常有前途的,这看起来在表单的最后一行(无论可能是什么)。 如果您的任何工作表开始达到最大行数,则需要执行以下操作:

 If Cells(Rows.Count, 1) <> "" Then ActiveSheet.Paste Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) Else MsgBox("Sheet " & ws.Name & " is full, row cannot be copied") End If 

但是,这可能是在路上,在这一点上,你可能会超过Excel。