1

在重新编译表上粘贴数据时遇到问题。重新编译表就像一个汇总表,将粘贴选定工作表中指定的所有数据。主表是参考表,其中范围(“AA”)包含我要复制和粘贴以重新编译表的所有工作表名称。工作表名称的示例是工作表 A、B、C...等我只需在主工作表范围 (“AA”) 处写入工作表名称,程序将跟踪已指定的所有工作表名称。我的问题是,当我从工作表 A 粘贴数据时,来自工作表 B、C、D 的数据也将粘贴到同一个单元格中,导致它被覆盖。我要做的是粘贴数据工作表 A 以重新编译工作表,然后下一个空单元格是来自工作表 B 的数据,依此类推。这是我的代码。

Private Sub CommandButton2_Click()

 Dim Sheetname, myrange As String
 Dim A, noOfrows As Integer
 Dim startRow As Integer

For i = 2 To Worksheets("Master Sheet").Cells.SpecialCells(xlCellTypeLastCell).Row

Sheetname = Worksheets("Master Sheet").Cells(i, 27).Value'Reference sheet range ("AA")
 noOfrows = Worksheets(Sheetname).Cells.SpecialCells(xlCellTypeLastCell).Row
 myrange = "A2:N" & CStr(noOfrows)'Data from column A to column N
 Worksheets(Sheetname).Select
 Worksheets(Sheetname).Range(myrange).Select
 Selection.Copy
 Sheets("Recompile").Select         
 Range("A2").Select
 ActiveSheet.Paste

 Next i
 End Sub
4

2 回答 2

1

有几件事不在您的代码中。看到您正在使用迭代/循环来处理此过程,只会出现一些混乱。不过,我主要担心的是您使用ActiveSheetandSelect并且您的最终操作仅涉及一个单元格 ( Range("A2")。这意味着每次迭代的结果操作仅更改此单元格。请参阅下面的一种可能的方法。

首先,您需要遍历Master Sheet, Column AA. 接下来,您必须检查与此名称对应的工作表的最后一行。根据您的代码,从Cell 开始A2到最后一行的单元格范围Column N被复制到重新编译表中A2(我假设您有标题)。

但是,在每次复制之后,您还需要做三件事: 1. 移动到工作表名称列表中的下一个名称。2. 找到与下一个名称对应的工作表的新最后一行。3. 找到重新编译表的新最后一行,这样你就可以从那里开始了。

现在,您需要循环与工作表一样多的次数。其逻辑产生以下代码(未经测试,请在工作簿的备份副本中执行):

Private Sub Boom()

    Dim ShMaster As Worksheet, ShRecompile As Worksheet
    Dim ShName As String, RngToCopy As Range
    Dim LRowSrc As Long, LRowRecompile As Long 'Src is other sheets
    Dim LRowMaster As Long 'This will be our iteration limit.
    Dim Iter As Long

    With ThisWorkbook
        Set ShMaster = .Sheets("Master Sheet")
        Set ShRecompile = .Sheets("Recompile")
    End With

    LRowMaster = ShMaster.Cells(Rows.Count, 27).End(xlUp).Row

    For Iter = 2 to LRowMaster
        ShName = ShMaster.Cells(Iter, 27).Value
        With ThisWorkbook.Sheets(ShName)
            LRowSrc = .Cells(Rows.Count, 1).End(xlUp).Row
            Set RngToCopy = .Range("A2:N" & LRowSrc)
            RngToCopy.Copy
        End With
        With ShRecompile
            LRowRecompile = .Cells(Rows.Count, 1).End(xlUp).Row + 1
            .Range("A" & LRowRecompile).PasteSpecial xlPasteAll
        End With
    Next Iter

End Sub

这里做了一个主要假设:您的工作表名称列表从 AA1 开始。这个很重要。如果不是,请更改Iter = 1为列表中真正起始单元格的行号在Iter = n哪里。n

让我们知道这是否有帮助。

更新:随着列表开始AA2,我已经更新了上面的代码。

于 2013-11-15T05:59:10.427 回答
0

未测试

改变这部分

Sheets("Recompile").Select         
Range("A2").Select
ActiveSheet.Paste

With Sheets("Recompile")
   .Range("A" & .Rows.Count).End(xlUp).offset(1,0).Paste
End With
于 2013-11-15T06:00:09.043 回答