【发布时间】:2016-01-28 16:26:34
【问题描述】:
我在比较两个工作簿之间的行时遇到问题。我想比较两个工作簿中的行,并将主工作簿中的更新数据添加到另一个工作簿中的下一个空白行。但是,我的代码只复制所有行而不是只复制新行。
Sub test()
Dim varSheetA As Variant
Dim varSheetB As Variant
Dim strRangeToCheck As String
Dim strRangeToC As String
Dim iRow As Long
Dim iRow2 As Long
Dim iCol As Long
Dim wbkA As Workbook
Dim eRow As Long
Dim cfind As Range
Dim c As Range
Dim rng As Range
Dim i, j, k As Integer
Dim newarr As String
Dim existarr As String
Dim b As Boolean
Set wbkA = Workbooks.Open(Filename:="C:\Users\mandy\Desktop\fortest.xlsx")
strRangeToCheck = "A:C"
strRangeToC = "C:E"
varSheetA = wbkA.Worksheets("Sheet1").Range(strRangeToCheck)
varSheetB = ThisWorkbook.Worksheets("Sheet1").Range(strRangeToC)
For iRow = LBound(varSheetA, 1) To UBound(varSheetA, 1)
For iRow2 = LBound(varSheetB, 1) To UBound(varSheetB, 1)
For iCol = LBound(varSheetA, 2) To UBound(varSheetA, 2)
If ThisWorkbook.Sheets("Sheet1").Range("C").Value = wbkA.Sheets("Sheet1").Range("A") Then
If ThisWorkbook.Sheets("Sheet1").Range("D").Value = wbkA.Sheets("Sheet1").Range("B") Then
If ThisWorkbook.Sheets("Sheet1").Range("E").Value = wbkA.Sheets("Sheet1").Range("C") Then
If varSheetA(iRow, iCol).EntireRow = varSheetB(iRow, iCol).EntireRow Then
' Cells are identical.
' Do nothing
Else
If ThisWorkbook.Sheets("Sheet1").Range("C" & iRow2).Value = wbkA.Sheets("Sheet1").Range("A" & iRow).Value Then
b = False
Else
If ThisWorkbook.Sheets("Sheet1").Range("D" & iRow2).Value = wbkA.Sheets("Sheet1").Range("B" & iRow).Value Then
b = False
Else
If ThisWorkbook.Sheets("Sheet1").Range("E" & iRow2).Value = wbkA.Sheets("Sheet1").Range("C" & iRow).Value Then
b = False
Else
eRow = ThisWorkbook.Worksheets("Sheet1").Cells(Rows.Count, 3).End(xlUp).Row + 1
ThisWorkbook.Sheets("Sheet1").Range("C" & eRow & ":E" & eRow).EntireRow = wbkA.Sheets("Sheet1").Range("A" & iRow & ":C" & iRow).EntireRow
Exit For
End If
End If
End If
End If
End If
End If
End If
Next
Next
Next
wbkA.Close savechanges:=False
End Sub
【问题讨论】:
-
搞笑:
....Range("A")...总是为我弹出错误:( -
呃,我为什么还要打开这个问题。那些级联的结束语句是 pythonista 的噩梦。一般来说,如果你能避免嵌套如此深的东西(这很可能不是这里的问题),你可能会更好地破译你的逻辑。
-
为了方便比较,将列比较为 Join(Array(cells(row1,col1),cells(row1,col2),cells(row1,col3),"")
-
这段代码真的编译运行了吗?
varSheetA是一个变体数组(3 个完整的列!)所以你不能调用varSheetA(iRow, iCol).EntireRow