Excel VBA做while循环不能识别do while语句

我正在尝试编写一个macros来检查一个名为原始数据的工作表中是否有匹配的名称,如果名称匹配,则将该行中的数据复制到名为search的工作表中。 我正在尝试使用do while while循环,类似于我以前成功使用的循环。

但是,当我尝试运行它,它给了我错误“循环没有做”,尽pipe事实上,一切似乎是在正确的地方。 我的代码如下:

Sub NameSearch() Sheets("Raw Data").Unprotect ("29745") Application.ScreenUpdating = False Dim x As Long 'set starting point at row 2 x = 2 Dim sourceSheet As Worksheet: Set sourceSheet = ThisWorkbook.Worksheets("Raw Data") Dim destSheet As Worksheet: Set destSheet = ThisWorkbook.Worksheets("Name Search") Do While sourceSheet.range("A" & x).Value <> "" If sourceSheet.range("O" & x).Value <> destSheet.range("B2") Then x = x + 1 Else If sourceSheet.range("O" & x).Value = destSheet.range("B2") Then 'selects the next row where the 1st column is empty lMaxRows = destSheet.Cells(destSheet.Rows.Count, "A").End(xlUp).Row 'pastes the data from the specified cells into the next empty row destSheet.range("A" & lMaxRows + 1).Value = sourceSheet.range("A" & x).Value destSheet.range("B" & lMaxRows + 1).Value = sourceSheet.range("B" & x).Value destSheet.range("C" & lMaxRows + 1).Value = sourceSheet.range("C" & x).Value destSheet.range("D" & lMaxRows + 1).Value = sourceSheet.range("D" & x).Value destSheet.range("E" & lMaxRows + 1).Value = sourceSheet.range("E" & x).Value destSheet.range("F" & lMaxRows + 1).Value = sourceSheet.range("F" & x).Value destSheet.range("G" & lMaxRows + 1).Value = sourceSheet.range("G" & x).Value destSheet.range("H" & lMaxRows + 1).Value = sourceSheet.range("F" & x).Value - sourceSheet.range("G" & x).Value destSheet.range("I" & lMaxRows + 1).Value = sourceSheet.range("M" & x).Value destSheet.range("J" & lMaxRows + 1).Value = sourceSheet.range("N" & x).Value x = x + 1 End If Loop End Sub 

我不能为了我的生活找出我做错了什么。 任何帮助改善我的代码将不胜感激!

你错过了一个End If …见下文

 Sub NameSearch() Sheets("Raw Data").Unprotect ("29745") Application.ScreenUpdating = False Dim x As Long 'set starting point at row 2 x = 2 Dim sourceSheet As Worksheet: Set sourceSheet = ThisWorkbook.Worksheets("Raw Data") Dim destSheet As Worksheet: Set destSheet = ThisWorkbook.Worksheets("Name Search") Do While sourceSheet.range("A" & x).Value <> "" If sourceSheet.range("O" & x).Value <> destSheet.range("B2") Then x = x + 1 Else If sourceSheet.range("O" & x).Value = destSheet.range("B2") Then 'selects the next row where the 1st column is empty lMaxRows = destSheet.Cells(destSheet.Rows.Count, "A").End(xlUp).Row 'pastes the data from the specified cells into the next empty row destSheet.range("A" & lMaxRows + 1).Value = sourceSheet.range("A" & x).Value destSheet.range("B" & lMaxRows + 1).Value = sourceSheet.range("B" & x).Value destSheet.range("C" & lMaxRows + 1).Value = sourceSheet.range("C" & x).Value destSheet.range("D" & lMaxRows + 1).Value = sourceSheet.range("D" & x).Value destSheet.range("E" & lMaxRows + 1).Value = sourceSheet.range("E" & x).Value destSheet.range("F" & lMaxRows + 1).Value = sourceSheet.range("F" & x).Value destSheet.range("G" & lMaxRows + 1).Value = sourceSheet.range("G" & x).Value destSheet.range("H" & lMaxRows + 1).Value = sourceSheet.range("F" & x).Value - sourceSheet.range("G" & x).Value destSheet.range("I" & lMaxRows + 1).Value = sourceSheet.range("M" & x).Value destSheet.range("J" & lMaxRows + 1).Value = sourceSheet.range("N" & x).Value x = x + 1 End If End If '<----MISSING END IF Loop End Sub