循环只循环一次,崩溃

我试图做一个macros,其中VBA查找列中的特定单词,当它find单词时,它将整个行从一个工作簿复制到另一个。 它可以find多于一次的单词,所以我试图让它循环,虽然它只在for循环中循环一次,然后停止。

这是for。

Application.Workbooks.Open ("C:\Documents and Settings\1848052\Mis documentos\Portafolios\Vistas\Portafolio.xlsm") i = 9 For j = 8 To 1000 celda = Workbooks("Portafolio.xlsm").Sheets("FemCo").Range("B" & j).Value If celda = area Then Workbooks("Portafolio.xlsm").Sheets("FemCo").Range("B" & j).Select fila = ActiveCell.Row Windows("Portafolio.xlsm").Activate ' Copiar row Range("A" & fila & ":" & "V" & fila).Select Selection.Copy Windows("Vista RPAs.xlsm").Activate 'Pegar row Range("B" & i & ":W" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False i = i + 1 End If Next 

正如我之前提到的,它只循环一次,然后这个:

 Workbooks("Portafolio.xlsm").Sheets("FemCo").Range("B" & j).Select 

是崩溃的部分,我得到“错误1004”。 你觉得我怎么能解决这个错误?

提前致谢。

您可以改用这个代码。 它避免了使用For j=8 to 1000语句(它使用Find方法代替 – 当你有很多行时它会好得多)。

 Sub test() Application.ScreenUpdating = False Workbooks.Open ("C:\Documents and Settings\1848052\Mis documentos\Portafolios\Vistas\Portafolio.xlsm") i = 9 With Workbooks("Portafolio.xlsm").Sheets("FemCo") Set c = .Range("B8:B1000").Find(area, LookIn:=xlValues) If Not c Is Nothing Then firstAddress = c.Address Do Workbooks("Vista RPAs.xlsm").ActiveSheet.Range("B" & i & ":W" & i).Value = _ .Range("A" & c.Row & ":" & "V" & c.Row).Value i = i + 1 Set c = .Range("B8:B1000").FindNext(c) Loop While Not c Is Nothing And c.Address <> firstAddress End If End With Workbooks("Portafolio.xlsm").Close Application.ScreenUpdating = True End Sub 

请注意,最好更改Workbooks("Vista RPAs.xlsm").ActiveSheetWorkbooks("Vista RPAs.xlsm").Sheets("SomeSheetName")

Simoco第一次得到它,select一个非活动的工作簿。 (只是如果块)

  Workbooks("Portafolio.xlsm").Sheets("FemCo").Range("A" & fila & ":" & "V" & fila).Copy Workbooks("Vista RPAs.xlsm").activesheet.Range("B" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False 

顺便说一句,整理一些有效的点,但“更好”的方式来做到这一点将运行一个循环周围查找语句,search相关的范围,你想要的字,并退出时,第一个find的logging再次被发现,或者找不到logging,这里有很多例子。