2016-12-06 8 views
0

Я хочу сравнить каждую строку листа NBG_Data с каждой строкой листа Comparison_Data, поэтому я хочу, чтобы каждая строка NBG_Data сравнивалась со всеми строками листа Comparison_Data, затем переходите к следующей строке , до тех пор, пока он не достигнет MAX_Row, проблема в том, что я не мог установить Nest цикл For (который я действительно хотел), поэтому я пытаюсь выполнить цикл Do, но когда я начинаю ошибку, это «Loop without Do» Если кто-нибудь скажет мне, что я сделал неправильно в цикле Do или лучше модифицировать, так что я могу иметь вложенную рабочую петлю.VBA Excel Сравните листы с вложенными данными Для

For Row = 2 To MAX_Row 


CompMonth = Worksheets(NBG_ComparisonDataWorksheetName).Cells(Row, SOP).Value 
CompMonth = DatePart("m", CompMonth) 

CompYear = Worksheets(NBG_ComparisonDataWorksheetName).Cells(Row, SOP).Value 
CompYear = DatePart("yyyy", CompYear) 


CompCarmaker = Worksheets(NBG_ComparisonDataWorksheetName).Cells(Row, Carmaker).Value 
CompProject = Worksheets(NBG_ComparisonDataWorksheetName).Cells(Row, Project).Value 
CompFamily = Worksheets(NBG_ComparisonDataWorksheetName).Cells(Row, Family).Value 
CompStatus = Worksheets(NBG_ComparisonDataWorksheetName).Cells(Row, Status).Value 
CompShare = Worksheets(NBG_ComparisonDataWorksheetName).Cells(Row, Share).Value 


Do While Row <= 2 

NBGMonth = Worksheets(NBG_DataWorksheetName).Cells(Row, SOP).Value 
NBGMonth = DatePart("m", NBGMonth) 

NBGYear = Worksheets(NBG_DataWorksheetName).Cells(Row, SOP).Value 
NBGYear = DatePart("yyyy", NBGYear) 

NBGCarmaker = Worksheets(NBG_DataWorksheetName).Cells(Row, Carmaker).Value 
NBGProject = Worksheets(NBG_DataWorksheetName).Cells(Row, Project).Value 
NBGFamily = Worksheets(NBG_DataWorksheetName).Cells(Row, Family).Value 
NBGStatus = Worksheets(NBG_DataWorksheetName).Cells(Row, Status).Value 
NBGShare = Worksheets(NBG_DataWorksheetName).Cells(Row, Share).Value 

Row = Row + 1 


' StatusBar Show 

Application.StatusBar = "VerifySumofShares. Progress: " & Row & " of " & MAX_Row 


     If (NBGMonth = CompMonth And NBGYear = CompYear And CompCarmaker = NBGCarmaker And CompProject = NBGProject And CompFamily = NBGFamily And NBGStatus <> "LOST" And CompStatus <> "LOST" And CompShare + NBGShare <= 99 And CompShare + NBGShare > 100) Then 



      Worksheets(Issue_SumofSharesWorksheetName).Cells(3 + Issue_SumofSharesCnt, "A").Value = Row 
      Worksheets(Issue_SumofSharesWorksheetName).Cells(3 + Issue_SumofSharesCnt, "B").Value = Worksheets(NBG_RegionaDataWorksheetName).Cells(Row, Project).Value 
      Worksheets(Issue_SumofSharesWorksheetName).Cells(3 + Issue_SumofSharesCnt, "C").Value = GetMonthAndQuarter(Worksheets(NBG_RegionaDataWorksheetName).Cells(Row, SOP).Value) 
      Worksheets(Issue_SumofSharesWorksheetName).Cells(3 + Issue_SumofSharesCnt, "D").Value = Worksheets(NBG_RegionaDataWorksheetName).Cells(Row, Family).Value 
      Worksheets(Issue_SumofSharesWorksheetName).Cells(3 + Issue_SumofSharesCnt, "E").Value = Worksheets(NBG_RegionaDataWorksheetName).Cells(Row, Responsible).Value 

      ' Region As String 
      Region = "" 

      'Add any other GeoRegion which is also responsible in the recorded data 


      If Worksheets(NBG_DataWorksheetName).Cells(Row, "BC") Then 
      Region = Region + "@EMEA" 
      End If 

      If Worksheets(NBG_DataWorksheetName).Cells(Row, "BD") Then 
      Region = Region + "@AMERICAS" 
      End If 

      If Worksheets(NBG_DataWorksheetName).Cells(Row, "BE") Then 
      Region = Region + "@GCSA" 
      End If 

      If Worksheets(NBG_DataWorksheetName).Cells(Row, "BF") Then 
      Region = Region + "@JAPAN&KOREA" 
      End If 


      Worksheets(Issue_SumofSharesWorksheetName).Cells(3 + Issue_SumofSharesCnt, "F").Value = Region 

      'Count the number of the cases recorded 


      Issue_SumofSharesCnt = Issue_SumofSharesCnt + 1 

      'If there is no items , the Message to show 


     ElseIf (Worksheets(NBG_RegionaDataWorksheetName).Cells(Row, SOP).Value = "There are no items to show in this view.") Then 


    End If 

    Loop Until Row = MAX_Row 

Next Row 
+0

Плохой отступ делает код более трудным для чтения, особенно код с вложенными структурами. Предварительные версии 2.x [Rubberduck] (https://github.com/rubberduck-vba/Rubberduck/releases) (я скоро выпущу новый) включают переписку популярного * Smart Indenter * add- который автоматически, последовательно и быстро отступывает ваш код для вас. –

ответ

1

У вас есть гибрид между Do While...Loop и Do...Loop Until цикла, что VBA не знает, как интерпретировать.

Либо изменение:

Do While Row <= 2 

к:

Do 

, чтобы сделать правильный Do...Loop Until петлю.

Или изменение:

Loop Until Row = MAX_Row 

к:

Loop 

, чтобы сделать правильный Do While...Loop петлю.

+0

Спасибо большое –

+0

добро пожаловать – user3598756

+0

код работал отлично, но athere проблема, теперь «Next Row» (For loop) не работает, если вы, пожалуйста, можете мне помочь. –