循环只循环一次,崩溃
我试图做一个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").ActiveSheet
到Workbooks("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,这里有很多例子。