打印工作表的名称以及复制的单元格

时间:2019-03-05 19:07:36

标签: excel vba

我有此代码,它在工作簿中的所有工作表之间循环,并复制每张工作表的F9中的值,并将其粘贴到“摘要”工作表列A中。如何在B列中打印工作表名称?因此,该值位于“摘要”工作表中工作表名称的旁边。

代码:

Sub loopsheet()
Dim wks As Worksheet

For Each wks In ThisWorkbook.Worksheets
   If Not wks.Name = "Summary" Then
   wks.Range("F9:F" & wks.Cells(Rows.Count, "F").End(xlUp).Row).Copy _
   Destination:=Worksheets("Summary").Cells(Rows.Count, "A").End(xlUp).Offset(1)

   End If
   Next
End Sub

谢谢

1 个答案:

答案 0 :(得分:1)

创建两个变量以在循环时跟踪工作表的最后一行。这将有助于代码的可读性。这两个变量的组合还可以帮助您推断需要删除工作表名称的范围的大小。

我相信cLR + pLR - 11是范围的大小。该偏移量是由于标题,LR偏移量以及您从第9行开始复制而造成的。运行此命令后,如果我错了,可能需要对其进行调整。

Option Explicit

Sub LoopSheet()

Dim ws As Worksheet
Dim Summary As Worksheet: Set Summary = ThisWorkbook.Sheets("Summary")
Dim cLR As Long, pLR As Long

For Each ws In ThisWorkbook.Worksheets
    If ws.Name <> Summary.Name Then
        cLR = ws.Range("F" & ws.Rows.Count).End(xlUp).Row
        pLR = Summary.Range("A" & Summary.Rows.Count).End(xlUp).Offset(1).Row

        ws.Range("F9:F" & cLR).Copy Summary.Range("A" & pLR)
        Summary.Range(Summary.Cells(pLR, 2), Summary.Cells(cLR + pLR - 11, 2)).Value = ws.Name
    End If
Next ws

End Sub