如果一个单元格等于另一个,复制并粘贴一个不同的单元格

好。 我有下面的代码,不断崩溃的Excel为我,但我不明白为什么。 我有基本相同的确切代码,我已经多次使用没有问题。

基本上,我在两个不同的工作簿中有姓氏和名字,如果他们相等,我想从一个工作簿复制出生date到其他工作簿。

Sub Macro4() Dim iRow As Integer, cRow As Integer iRow = 4 Dim wbC As Workbook, wbA As Workbook, wsC As Worksheet, wsA As Worksheet Set wbC = Workbooks("Coventry Enroll Census 113014") Set wbA = Workbooks("Copy of Ameritas Enroll Census Template 1 1 15 (2).xls") Set wsC = wbC.Sheets(1) Set wsA = wbA.Sheets(2) Do: cRow = 2 'Reset cRow 'DOB If wsC.Cells(cRow, 2) = wsA.Cells(iRow, 2) And wsC.Cells(cRow, 1) = wsA.Cells(iRow, 3)Then wsC.Cells(cRow, 10).Select Selection.Copy Range(wsA.Cells(iRow, 6)).PasteSpecial (xlPasteValues) iRow = iRow + 1 Else cRow = cRow + 1 End If Loop Until wsC.Cells(cRow, 1) = "" And wsC.Cells(cRow + 1, 1) = "" And wsC.Cells(cRow + 2, 1) = "" End Sub 

我认为你创build和无限循环,因为你在每个循环的开始重置cRow 。 所以可能until从来没有这样的条件是真的,因为cRow是2或3.我不能真正解释崩溃,但我认为这是相关的。 尝试在循环的Do之前设置cRow = 2

尝试直接设置值,而不是select它们。 我不能肯定地说,如果这样做能够解决您的问题,而无需使用您的工作簿和系统,只需要一试。

此外,请查看有关避免在VBA中使用Select语句的链接 。

 Do: cRow = 2 'Reset cRow 'DOB If wsC.Cells(cRow, 2) = wsA.Cells(iRow, 2) And wsC.Cells(cRow, 1) = wsA.Cells(iRow, 3) Then wsA.Cells(iRow, 6).Value = wsC.Cells(cRow, 10).Value 'THIS SETS ONLY THE VALUE. iRow = iRow + 1 Else cRow = cRow + 1 End If Loop Until wsC.Cells(cRow, 1) = "" And wsC.Cells(cRow + 1, 1) = "" And wsC.Cells(cRow + 2, 1) = "" End Sub 

侧注意:你是否打算将文件扩展名包含在wbA中而不是wbC中? 从你的代码:

 Set wbC = Workbooks("Coventry Enroll Census 113014") Set wbA = Workbooks("Copy of Ameritas Enroll Census Template 1 1 15 (2).xls") 

编辑笔记:添加边注。