在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一次,循环会尝试每次都这样做,并应该抛出一个错误(用你的
ws
variables来减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。