首页 文章

如何粘贴下一个空单元格而不是粘贴在同一单元格中

提问于
浏览
1

我在重新编译表中粘贴数据时遇到问题 . 重新编译表就像一个摘要表,将粘贴指定的选定工作表中的所有数据 . 主表是一个参考表,其中范围(“AA”)包含我要复制并粘贴到重新编译表的所有工作表名称 . 工作表名称的示例是工作表A,B,C ...等我只需要在主表单范围(“AA”)中写入工作表名称,程序将跟踪已指定的所有工作表名称 . 我的问题是当我从工作表中粘贴数据时工作表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

2 回答

  • 1

    您的代码中有许多内容 . 看到您正在使用迭代/循环接近此过程,只会出现一些混淆 . 我主要担心的是你使用 ActiveSheetSelect ,并且你的最终动作只涉及一个单元格( Range("A2" ) . 这意味着每次迭代的结果动作只会改变这个单元格 . 请参阅下面的一个可能的方法 .

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

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

    现在,你需要这个循环次数和床单一样多 . 这个逻辑产生了以下代码( untested ,请在工作簿的备份副本中执行):

    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 是列表中真正起始单元格的行号 .

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

    UPDATE: 当列表在 AA2 中开始时,我已经更新了上面的代码 .

  • 0

    Not tested

    改变这一部分

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

    With Sheets("Recompile")
       .Range("A" & .Rows.Count).End(xlUp).offset(1,0).Paste
    End With
    

相关问题