使用Range.Copy方法复制和粘贴

时间:2018-08-12 17:02:37

标签: excel vba for-loop copy copy-paste

我正在尝试将一堆表中的值粘贴到一个长列表中。我的表分布在不同的工作表中,并且行数发生了变化,但列却没有。然后,我也尝试粘贴一个字符串值,该字符串值告诉它来自哪个工作表,但是在代码的活动单元格部分遇到了麻烦。

当我第一次尝试它时,它没有编译,因此我为什么来到这里,弄清楚为什么它没有编译。在下面与urdearboy来回往返,我能够在此处获得正确的代码。

我有以下内容:

sub copypaste()
  Dim ws1 as worksheet
  dim ws2 as worksheet
  dim mas as worksheet
  Set ws1 =ThisWorkbook.Sheets("Sheet1")
  Set ws2=ThisWorkbook.Sheets("Sheet2")
  Set mas=ThisWorkbook.Sheets("Master") 'where I create my list

     For Each ws In Worksheets
    If ws.Name <> mas.Name Then
        LRow = mas.Range("A" & mas.Rows.Count).End(xlUp).Offset(1, 0).Row
        wsLRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
        ws.Range("A2:A" & wsLRow - 1).Copy
        mas.Range("A" & LRow).PasteSpecial Paste:=xlPasteValues
        ws.Range("B2:B" & wsLRow - 1).Copy
        mas.Range("B" & LRow).PasteSpecial Paste:=xlPasteValues
        mas.Range(mas.Cells(LRow, 4), mas.Cells(wsLRow + LRow - 2, 4)) = ws.Name 'I need my sheet value in the fourth column, not the third, but simply change the col coordinate in the Cells equation above

    End If
Next ws

'In order to figure out the sheet name, I used the following:
Dim rng As Range
Set rng = mas.Range("D2", Range("D2").End(xlDown))
For Each Cell In rng
    If Cell.Value = "Sheet 1" Then
        Cell.Value = "S1"
    ElseIf Cell.Value = "Sheet 2" Then
        Cell.Value = "S2"
    End If
Next Cell

结束子

1 个答案:

答案 0 :(得分:1)

这将循环遍历所有工作表,但Master除外,并将列A上的值与数据的原点(工作表名称)一起导入Master )。

Option Explicit是很好的衡量标准。


Option Explicit

Sub copypaste()

Dim mas As Worksheet: Set mas = ThisWorkbook.Sheets("Master")
Dim ws As Worksheet, LRow As Long, wsLRow As Long

Application.ScreenUpdating = False
    For Each ws In Worksheets
        If ws.Name <> mas.Name Then
            LRow = mas.Range("A" & mas.Rows.Count).End(xlUp).Offset(1).Row
            wsLRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
            ws.Range("A2:A" & wsLRow).Copy mas.Range("A" & LRow)
            mas.Range(mas.Cells(LRow, 2), mas.Cells(wsLRow + LRow - 2, 2)) = ws.Name
        End If
    Next ws
Application.ScreenUpdating = True

End Sub

要粘贴值更改

ws.Range("A2:A" & wsLRow).Copy mas.Range("A" & LRow)

对此

ws.Range("A2:A" & wsLRow).Copy
mas.Range("A" & LRow).PasteSpecial xlPasteValues