VBA从上面的行中的不同工作表复制数据,其中单元格文本“小计”

时间:2018-02-17 03:42:14

标签: excel-vba vba excel

  

想要将不同工作表中的数据复制到名为的工作表中   “摘要”。数据需要从上面的一行复制(其中行包含文本   “小计”)到行/列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

1 个答案:

答案 0 :(得分:0)

您的代码存在一些缺陷。

  1. Identation 即可。 Sub,For中的代码,如果需要用制表符或4个空格标识。
  2. 结束即可。每个Sub都有End Sub,每个IfEnd If,每个For都有End For
  3. <强>值即可。您可以设置.Range() = new_value
  4. ,而不是复制和粘贴
  5. 字符串比较。如果用户写小计或SUBTOTAL,If cell.Value = "Subtotal"将失败。这就是为什么我更喜欢使用LCase()函数来小写单元格值。
  6. 您可能需要使用以下代码

     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