[英]Looping through all active Worksheets
我使用VBA的经验非常薄弱,但是现在遇到了真正需要它的问题。
我需要将多个工作表(除“摘要”之外)中的单元格值复制到一个工作表中,但遇到了问题。 运行宏时,我得到的值大约有30行,但是所有30个值都属于同一工作表。 似乎循环仅在1个工作表上运行。 您能帮我找到代码中的错误吗?
Sub CopyTotalSalesPrice()
For Each Worksheet In ActiveWorkbook.Worksheets
If Worksheet.Name <> "Summary" Then
Worksheet.Cells(Rows.Count, 7).End(xlUp).Select
End If
If Selection.Value > "0" Then
Selection.Copy
Worksheets("Summary").Cells(Rows.Count, 6).End(xlUp).Offset(2, 0).PasteSpecial (xlPasteValues)
Range("D4").Select
Selection.Copy
Worksheets("Summary").Cells(Rows.Count, 4).End(xlUp).Offset(2, 0).PasteSpecial (xlPasteValues)
End If
Next Worksheet
Worksheets("Summary").Select
End Sub
当使用Cells(Rows.Count,7).End(xlUp).Select以及其他所有内容时,它们均引用当前工作表。 因此,您要么将它们放在Worksheet.Cells(Rows.Count,7).End(xlUp).Select前面,要么先使用Worksheet.Activate来激活工作表。
或者您可以按照以下步骤操作:
Sub CopyTotalSalesPrice()
For Each Worksheet In ActiveWorkbook.Worksheets
With Worksheet
If .Name <> "Summary" Then
.Cells(Rows.Count, 7).End(xlUp).Copy Destination:=Worksheets("Summary").Cells(Rows.Count, 6).End(xlUp).Offset(2, 0)
.Range("D4").Copy Destination:=Worksheets("Summary").Cells(Rows.Count, 4).End(xlUp).Offset(2, 0)
End If
End With
Next Worksheet
Worksheets("Summary").Select
End Sub
尝试这个:
Sub CopyTotalSalesPrice()
For Each Worksheet In ActiveWorkbook.Worksheets
If Worksheet.Name <> "Summary" Then
Worksheet.Select
Worksheet.Cells(Worksheet.Rows.Count, 7).End(xlUp).Select
End If
If Selection.Value > "0" Then
Selection.Copy
Worksheets("Summary").Cells(Worksheet.Rows.Count, 6).End(xlUp).Offset(2, 0).PasteSpecial (xlPasteValues)
Range("D4").Select
Selection.Copy
Worksheets("Summary").Cells(Worksheet.Rows.Count, 4).End(xlUp).Offset(2, 0).PasteSpecial (xlPasteValues)
End If
Next Worksheet
Worksheets("Summary").Select
End Sub
我用Worksheet.Cells(Worksheet.Rows.Count, 7).End(xlUp).Select
替换了此Cells(Rows.Count, 7).End(xlUp).Select
Worksheet.Cells(Worksheet.Rows.Count, 7).End(xlUp).Select
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.