【问题标题】:Copy multiple rows from one worksheet to another worksheet using macro/vba使用宏/vba 将多行从一个工作表复制到另一个工作表
【发布时间】:2014-02-01 14:39:19
【问题描述】:

我浏览了论坛并尝试了各种选项,但没有找到适合我的问题的明确匹配项:

我的任务是将数据从工作表(称为“工作订单”)复制到第二个工作表(称为“分配”)。要复制的数据来自“工作订单”工作表,从单元格区域“E2,P2:S2”开始;并且还从每一行(相同范围)复制,直到列“P”为空 - (每次我们需要运行此宏时,要复制的行数可能会有所不同,因此我们无法选择标准范围)。然后粘贴到“作业”工作表中,从单元格“A4”开始。到目前为止,我已经使用论坛成功地复制了单行日期(从第 2 行开始)——我承认这很容易,并且我使用了各种版本的代码来实现这一点。 我还尝试了一些代码(我通过观看 youtube 剪辑并修改 http://www.youtube.com/watch?v=PyNWL0DXXtQ 发现)以允许我运行一个循环,该循环为“工作订单”工作表中的每个所需行重复复制过程,然后将数据粘贴到“作业”工作表 - 但这是我做错的地方,我认为我的思路是正确的,并且认为我离得不远,但任何帮助都会非常有用。

下面的代码示例(前 2 个仅复制第一行,第三个示例是我尝试循环和复制多行的地方:

Sub CopyTest1()
' CopyTest1 Macro
'copy data from workorders sheet
'Worksheets("workorders").Range("E2,P2,Q2,R2,S2").Copy
Worksheets("workorders").Range("E2, P2:S2").Copy
'paste data to assignments sheet
'sheets("assigments dc").Range("A4").Paste
Sheets("Assigments DC").Select
Range("A4").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub




Sub CopyTest2()
Sheets("workorders").Range("e2,p2,q2,r2,s2").Copy Sheets("assigments dc").Range("a4")
End Sub


Sub CopyTest3()
Dim xrow As Long
'Dim xrow As String
xrow = 2
Worksheets("workorders").Select
Dim lastrow As Long
lastrow = Cells(Rows.Count, 16).End(xlUp).Row
Do Until xrow = lastrow + 1
ActiveSheet.Cells(xrow, 16).Select
If ActiveCell.Text = Not Null Then
'Range("E2,P2,Q2,R2,S2").Copy
'Selection = Range("E2,P2,Q2,R2,S2").Copy
'Cells(xrow, 5).Copy
Cells(xrow, 5).Copy
Sheets("Assigments DC").Select
Range("A4").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Sheets("workorders").Select
End If
xrow = xrow + 1
Loop
End Sub

【问题讨论】:

    标签: vba excel excel-2010


    【解决方案1】:

    试试这个:

    Sub LoopCopy()
    
        Dim shWO As Worksheet, shAss As Worksheet
        Dim WOLastRow As Long, Iter As Long
        Dim RngToCopy As Range, RngToPaste As Range
    
        With ThisWorkbook
            Set shWO = .Sheets("Workorders") 'Modify as necessary.
            Set shAss = .Sheets("Assignments") 'Modify as necessary.
        End With
    
        'Get the row index of the last populated row in column P.
        'Change accordingly if you want to use another column as basis.
        'Two versions of getting the last row are provided.
        WOLastRow = shWO.Range("P2").End(xlDown).Row
        'WOLastRow = shWO.Range("P" & Rows.Count).End(xlUp).Row
    
        For Iter = 2 to WOLastRow
            Set RngToPaste = shAss.Range("A" & (Iter + 2))
            With shWO
                Set RngToCopy = Union(.Range("E" & Iter), .Range("P" & Iter & ":S" & Iter))
                RngToCopy.Copy RngToPaste
            End With
        Next Iter
    
    End Sub
    

    先阅读cmets并进行测试。

    如果这有帮助,请告诉我们。

    【讨论】:

      【解决方案2】:

      据我所知,您只是在复制 E 列中的单元格。您可以通过将 Cells(xrow, 5).Copy 替换为

      来纠正此问题
      Union(Sheets("workorders").Cells(xrow,5),Sheets("workorders").Range(Cells(xrow,"P"),Cells(xrow,"S")).Copy
      

      但是,使用SelectCopy 并不理想。相反,您可以直接分配范围的值:

      Sheets("Assignments DC").Range("A4").Value = Union(Sheets("workorders").Cells(xrow,5),Sheets("workorders").Range(Cells(xrow,"P"),Cells(xrow,"S")).Value
      

      有关the Union methodwhy using Select is bad 的更多信息。

      【讨论】:

        【解决方案3】:

        甚至可以像这样运行一条线吗? Worksheets("workorders").Range("E2, P2:S2").Copy

        每次我尝试不同的方法来复制/选择一个范围,在我的情况下,A3 和范围 A34:C40 ("A3, A34:C40").Copy 我收到一个错误,说有很多参数..这可能是因为我正在运行 excel 2007 吗?

        任何提示或帮助将不胜感激! :)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多