此代码有效,但它正在使用dstRow.Row并将其作为要复制的行。我不希望这样。我想使用srcMatchRow = cell.Row
我错过了什么?
Sub CopyCellsBetweenSheets()
Dim srcFile As String
Dim dstFile As Workbook
Dim srcSheet As Worksheet
Dim dstSheet As Worksheet
Dim cell As Range
Dim i As Integer
Dim lastRow As Integer
Set dstFile = Application.Workbooks.Open("C:\dev\t\each.xlsm")
Set srcSheet = ThisWorkbook.Worksheets("Final")
Set dstSheet = dstFile.Worksheets("RoomA")
srcLastRow = srcSheet.Range("A" & Rows.Count).End(xlUp).Row
dstRow = 11 'start copy on row 11
For Each cell In srcSheet.Range("A1:A" & srcLastRow)
If cell.Value >= 8 And cell.Value <= 10 Then
srcMatchRow = cell.Row
srcSheet.Range("A" & srcMatchRow & ":L" & srcMatchRow).Copy
dstSheet.Range("A" & dstRow & ":L" & dstRow).PasteSpecial
dstRow = dstRow + 1
End If
Next
End Sub
具体示例应获取cols A:L,以获取srcFile中列A值为8,9或10的行。然后将这些相应的列复制到dstFile中的第11,12,13行。
相反,它找到匹配的列A单元格在第20行,然后忽略它,而不是抓取第11行上的任何内容,无论它是否满足条件。
为了概括,我想从另一个工作簿中的一行中获取符合条件的行,并保存到从dstRow开始的行;每增加一场比赛,dstRow递增1。
答案 0 :(得分:1)
你需要澄清细胞的价值,因为它实际上是一个范围,可能是这样的:
For Each cell In srcSheet.Range("A1:A" & srcLastRow).Rows
答案 1 :(得分:0)
这是不检查源数据的情况。
单元格已在工作表“Final”中重新排序,并使用公式,因此我一直在复制公式。解决方案是:
dstSheet.Range("A" & dstRow & ":L" & dstRow).PasteSpecial Paste:=xlPasteValues