2015-04-20 6 views
0

Я редактировал/записывал этот код, чтобы объединить несколько книг в один. Однако я получаю ошибку «Loop without Do». Возможный дубликат не говорит, что пошло не так, только дает новый код, так что это не ответ на мой вопрос, а решение.Loop не распознает Do

Sub MergeAllWorkbooks() 
    Dim SummarySheet As Worksheet 
    Dim FolderPath As String 
    Dim NRow As Long 
    Dim OCol As Long 
    Dim FileName As String 
    Dim WorkBk As Workbook 
    Dim SourceRangeCult As Range 
    Dim DestRangeCult As Range 
    Dim SourceRangeYield As Range 
    Dim DestRangeYield As Range 
    Dim SourceRangeLoc As Range 
    Dim DestRangeLoc As Range 
    Dim SourceRangeDRipe As Range 
    Dim DestRangeDRipe As Range 
    Dim LastRow As Integer 
    Dim LastColumn As Integer 
    Dim col As Integer 

    Set SummarySheet = Workbooks.Add(xlWBATWorksheet).Worksheets(1) 

    FolderPath = "M:\My Documents\MSC Thesis\United Kingdom\Winter Barley\Merge excel\" 

    NRow = 1 
    OCol = 2 
    OColD = OCol + 48 


    FileName = Dir(FolderPath & "*.xl*") 


     Do While FileName <> "" 

      Set WorkBk = Workbooks.Open(FolderPath & FileName) 


      SummarySheet.Range("A" & NRow).Value = FileName 


      LastRow = ActiveSheet.UsedRange.Rows.Count 
      LastColumn = ActiveSheet.UsedRange.Columns.Count 

       For col = 2 To 49 

       Set SourceRangeLoc = WorkBk.Worksheets(1).Range("A1:A" & LastRow) 
       Set DestRangeLoc = SummarySheet.Range("C" & NRow) 
       Set DestRangeLoc = DestRange.Resize(SourceRangeLoc.Rows.Count, 1) 

       Set SourceRangeCult = WorkBk.Worksheets(1).Range(OCol & "1:" & OCol & "1") 
       Set DestRangeCult = SummarySheet.Range("B" & NRow) 
       Set DestRangeCult = DestRange.Resize(SourceRangeLoc.Rows.Count, 1) 

       Set SourceRangeYield = WorkBk.Worksheets(1).Range(OCol & "2:" & OCol & LastRow) 
       Set DestRangeYield = SummarySheet.Range("D" & NRow) 
       Set DestRangeYield = DestRange.Resize(SourceRangeLoc.Rows.Count, 1) 

       Set SourceRangeDRipe = WorkBk.Worksheets(1).Range(OColD & "2:" & OColD & LastRow) 
       Set DestRangeDRipe = SummarySheet.Range("E" & NRow) 
       Set DestRangeDRipe = DestRange.Resize(SourceRangeLoc.Rows.Count, 1) 


       DestRangeCult.Value = SourceRangeCult.Value 

       Exit For 

       NRow = NRow + DestRange.Rows.Count 
       OCol = OCol + 1 

      WorkBk.Close savechanges:=False 

      FileName = Dir() 

     Loop 

    SummarySheet.Columns.AutoFit 

End Sub 
+0

Вы не закрыли свою петлю 'For' ... –

+0

А я вижу, мне нужен следующий столбец. – Luuklag

+0

'Exit For' - это когда вы хотите' Exit' цикл 'For' до его завершения. Цикл 'For' всегда должен быть закрыт оператором' Next'. https://msdn.microsoft.com/en-us/library/5z06z1kb.aspx –

ответ

0

Ваш внутренний For Петля не имеет закрывающего выражения. Exit For используется, чтобы вырваться из цикла - чтобы указать правильное окончание, просто используйте Next.