VBA嵌套用于循环 - 粘贴值

时间:2014-08-11 17:47:23

标签: 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("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

1 个答案:

答案 0 :(得分:0)

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

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)