想要将不同工作表中的数据复制到名为的工作表中 “摘要”。数据需要从上面的一行复制(其中行包含文本 “小计”)到行/列A2。下面是我的VBA代码,但收到错误MESSAGE“编译器错误,Else没有If”,不知道我错过了什么。 请帮帮我。
Sub CombineData()
Dim Sht As Worksheet
For Each Sht In ActiveWorkbook.Worksheets
If Sht.Name <> "Summary" And Left(Sht.Name, 1) = "1" Or Left(Sht.Name, 1) = "4" Or Left(Sht.Name, 1) = "6" Or Left(Sht.Name, 1) = "7" Then
Sht.Select
'LastRow = Range("A65536").End(xlUp).Row
Set MyRng = Range(Cells(1, "d"), Cells(Rows.Count, "d").End(xlUp))
For Each cell In MyRng
If cell.Value = "Subtotal" Then cell.Value = cell.Offset(-1, 0).Value
.Range("A2", "M&MyRng").Copy
Sheets("Summary").Select
Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
Sht.Select
Range("p1").ClearContents
Else
End If
Next Sht
End Sub
答案 0 :(得分:0)
您的代码存在一些缺陷。
Sub
都有End Sub
,每个If
和End If
,每个For
都有End For
.Range() = new_value
If cell.Value = "Subtotal"
将失败。这就是为什么我更喜欢使用LCase()
函数来小写单元格值。您可能需要使用以下代码
Sub CombineData()
Dim Sht As Worksheet
'Identify Sheet called Summary
Dim wsSummary As Worksheet
Set wsSummary = ActiveWorkbook.Sheets("Summary")
For Each Sht In ActiveWorkbook.Worksheets
If Sht.Name <> "Summary" And (Left(Sht.Name, 1) = "1" Or Left(Sht.Name, 1) = "4" Or Left(Sht.Name, 1) = "6" Or Left(Sht.Name, 1) = "7") Then
For Each cell In Sht.UsedRange.Cells
If LCase(cell.Value) = "subtotal" Then
'Copy cell above subtotal to the last row in column A of Summary sheet
wsSummary.Range("A65536").End(xlUp).Offset(1, 0) = cell.Offset(-1, 0).Value
Sht.Range("p1") = cell.Offset(-1, 0).Value
End If
Next
End If
Next Sht
End Sub