用于循环粘贴值的VBA嵌套

用于循环粘贴值的VBA嵌套,vba,loops,copy-paste,Vba,Loops,Copy Paste,一个简单的问题,我正在努力解决 我正在将多个工作表中的值复制并粘贴到一个主控表中,如下所示 Sub() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets Select Case LCase(ws.Name) Case [...] 'do nothing for selected worksheets Case Else ws.Range(

一个简单的问题,我正在努力解决

我正在将多个工作表中的值复制并粘贴到一个主控表中,如下所示

Sub()
    Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Worksheets
        Select Case LCase(ws.Name)
        Case [...] 'do nothing for selected worksheets
        Case Else
            ws.Range("J2") = ws.Name

            Dim myLastCell As Range
            Set myLastCell = LastCell(ws.Range("A:J"))

            ws.Range("A1:J" & myLastCell.Row).Copy Sheets("MasterDates").Cells(rows.Count, "B").End(xlUp).Offset(1)
        End Select
    Next
End Sub
上面的代码引用了一个查找最后一个单元格的函数myLastCell

问题是:我还想取我在每个J2中输入的工作表名称,并将其复制粘贴到列的每个单元格中的每个工作表中,直到数据结束。这样,适当的日期将与我正在创建的长母版图纸中的所有其他值对齐

我试着插入下面的代码,只是for循环本身,然后在sub中插入,但我不知道如何将其合并到已经发生的循环中。非常感谢大家的帮助

Sub testpaste()
    DateValue = Range("J2").Value
    stoprow = Range("A1").End(xlDown).Row
    For i = 3 To stoprow
    Cells(i, 10).Value = DateValue
    Next
End Sub

您可以将工作表作为参数添加到testpaste子项:

Sub testpaste(myWorksheet as worksheet)
    DateValue = myWorksheet.Range("J2").Value
    stoprow = myWorksheet.Range("A1").End(xlDown).Row
    For i = 3 To stoprow
        myWorksheet.Cells(i, 10).Value = DateValue
    Next
End Sub
然后从Select语句内部调用它,方法是:

    Case Else
        ws.Range("J2") = ws.Name

        testpaste(ws)

        Dim myLastCell As Range
        Set myLastCell = LastCell(ws.Range("A:J"))

        ws.Range("A1:J" & myLastCell.Row).Copy Sheets("MasterDates").Cells(rows.Count, "B").End(xlUp).Offset(1)
但是,只有当您打算从代码的其他部分调用它时,这才是真正必要的。否则,您可以将其作为当前Select语句的一部分添加:

    Case Else
        ws.Range("J2") = ws.Name

        DateValue = ws.Range("J2").Value
        stoprow = ws.Range("A1").End(xlDown).Row
        For i = 3 To stoprow
            ws.Cells(i, 10).Value = DateValue
        Next

        Dim myLastCell As Range
        Set myLastCell = LastCell(ws.Range("A:J"))

        ws.Range("A1:J" & myLastCell.Row).Copy Sheets("MasterDates").Cells(rows.Count, "B").End(xlUp).Offset(1)