我有两个工作簿。一个名为Target工作簿,另一个名为源工作簿。
目标工作簿具有所有项目ID,并且某些项目ID将出现多次。在源工作簿中它是空的,因为还没有输入数据。
我需要一个代码,它允许我遍历目标工作簿中项目ID的所有行,我希望将这些行传输到源工作簿。
例如,我会投影ID" 10000327"在目标工作簿中不止一次出现,我需要传输所有包含" 10000327"关于项目ID。
现在,我只能找到匹配的项目ID一次,并且不允许我查看所有行,直到找到空行并且代码将停止搜索。因此,它不允许我捕获多个包含" 10000327"的项目ID。在目标工作簿中。这只能在工作簿具有项目ID时运行,但我想要一个代码,它只关注目标工作簿项目ID并将其传输到源工作簿,而不是在目标和源工作簿之间进行匹配。
这是我到目前为止的代码:
Sub AAB()
Dim sWS As Worksheet, tWS As Worksheet
Dim pidCol As Long, pidRow As Long, pidStr As String, rw As Long
Set tWS = Workbooks("Target.xlsm").Sheets("Sheet1")
Set sWS = Workbooks("Source.xlsm").Sheets("Sheet2")
With tWS
With .Cells(2, 1).CurrentRegion
pidCol = 1
pidStr = "10000327" '.Cells(rw, pidCol).Value
If CBool(Application.CountIf(.Columns(1), pidStr)) Then
rw = Application.Match(pidStr, .Columns(1), 0)
With .Cells(rw, 2).Resize(1, .Columns.Count - 1)
If CBool(Application.CountIf(sWS.Columns(1), pidStr)) Then
pidRow = Application.Match(pidStr, sWS.Columns(1), 0)
.Copy Destination:=tWS.Cells(pidRow, 2)
End If
End With
End If
End With
End With
Set sWS = Nothing
Set tWS = Nothing
End Sub
我希望有人可以帮助我,因为我已经坚持了将近两周。 谢谢。
答案 0 :(得分:0)
你的方式有点过于复杂。也许我误解了一些东西,但如果你想找到一个项目ID并将该行复制到不同的工作簿,你可以遍历这些行并复制具有正确项目ID的行:
For LineNo = 2 To Range("A1").End(xlDown).Row
If Range("A" & LineNo).Value = pidStr Then
sWS.Rows(LineNo & ":" & LineNo).Copy Destination:=tWS.Rows(tWS.Range("A1").End(xlDown).Row + 1 & ":" & tWS.Range("A1").End(xlDown).Row + 1)
End If
Next LineNo
或者您可以过滤数据表并仅复制剩余的行:
ActiveSheet.Range("$A$1:$C$" & Range("A1").End(xlDown).Row).AutoFilter Field:=1, Criteria1:=pidStr
Rows("2:" & Range("A1").End(xlDown).Row).SpecialCells(xlCellTypeVisible).Copy Destination:=tWS.Rows(tWS.Range("A1").End(xlDown).Row + 1 & ":" & tWS.Range("A1").End(xlDown).Row + 1)