如果找不到则搜索并插入
Search and insert if not found
我在尝试复制两个工作表之间的一行时遇到了一些障碍。我们可以将第一个工作表视为源,将另一个工作表视为目标。如果 APN
字段(字符串)在源中而不是目标中,我们需要将整行复制到目标中。在 APN
存在于目标中,则仅复制第 3 列。后者工作正常,但我无法复制整行。 APN
字段位于 A 列并从 A2 行开始。任何帮助将不胜感激。代码如下:
Dim targetSheet As Worksheet
Set targetSheet = targetWorkbook.Worksheets(1)
Dim sourceSheet As Worksheet
Set sourceSheet = customerWorkbook.Worksheets(1)
Dim r As Range
Dim matched As Range
sourceNumRows = sourceSheet.Range("A2", Range("A2").End(xlDown)).Rows.Count
targetNumRows = targetSheet.Range("A2").CurrentRegion.Rows.Count
Set r = targetSheet.Range("A:A")
sourceSheet.Range("A2").Select
Do Until IsEmpty(ActiveCell)
' Check for the APN
APN = ActiveCell.Value
Set matched = r.Find(APN)
If matched Is Nothing Then
'Insert row below at end of target worksheet
'===================problem area===========
'At this point I have a field in the source document that does
' not have an APN in the destination or target worksheet and
'so I need to insert the Active Row to the last row
'destination sheet
'
targetSheet.Cells(targetNumRows, 0).EntireRow.Insert = ActiveCell.EntireRow.Select
'======= end of problem area============
Else
matched.Offset(0, 2) = ActiveCell.Offset(0, 2)
End If
ActiveCell.Offset(1, 0).Select
Loop
您需要分两步完成此操作:插入然后复制行值。您的 Cells()
引用也有错误。您正在为该列传递 0
,这是无效的。
改变这个:
targetSheet.Cells(targetNumRows, 0).EntireRow.Insert = ActiveCell.EntireRow.Select
收件人:
targetSheet.Cells(targetNumRows, 1).EntireRow.Insert
ActiveCell.EntireRow.Copy targetSheet.Cells(targetNumRows, 1)
请注意,按照您的编写方式,它将继续在目标 sheet 的 initial 底部插入行。不确定这对您来说是否是个问题。例如,如果您添加三个新行,它将如下所示:
╔════════════╗
║ TargetData ║
╠════════════╣
║ OldData ║
║ OldData ║
║ NewRow3 ║
║ NewRow2 ║
║ NewRow1 ║
╚════════════╝
我在尝试复制两个工作表之间的一行时遇到了一些障碍。我们可以将第一个工作表视为源,将另一个工作表视为目标。如果 APN
字段(字符串)在源中而不是目标中,我们需要将整行复制到目标中。在 APN
存在于目标中,则仅复制第 3 列。后者工作正常,但我无法复制整行。 APN
字段位于 A 列并从 A2 行开始。任何帮助将不胜感激。代码如下:
Dim targetSheet As Worksheet
Set targetSheet = targetWorkbook.Worksheets(1)
Dim sourceSheet As Worksheet
Set sourceSheet = customerWorkbook.Worksheets(1)
Dim r As Range
Dim matched As Range
sourceNumRows = sourceSheet.Range("A2", Range("A2").End(xlDown)).Rows.Count
targetNumRows = targetSheet.Range("A2").CurrentRegion.Rows.Count
Set r = targetSheet.Range("A:A")
sourceSheet.Range("A2").Select
Do Until IsEmpty(ActiveCell)
' Check for the APN
APN = ActiveCell.Value
Set matched = r.Find(APN)
If matched Is Nothing Then
'Insert row below at end of target worksheet
'===================problem area===========
'At this point I have a field in the source document that does
' not have an APN in the destination or target worksheet and
'so I need to insert the Active Row to the last row
'destination sheet
'
targetSheet.Cells(targetNumRows, 0).EntireRow.Insert = ActiveCell.EntireRow.Select
'======= end of problem area============
Else
matched.Offset(0, 2) = ActiveCell.Offset(0, 2)
End If
ActiveCell.Offset(1, 0).Select
Loop
您需要分两步完成此操作:插入然后复制行值。您的 Cells()
引用也有错误。您正在为该列传递 0
,这是无效的。
改变这个:
targetSheet.Cells(targetNumRows, 0).EntireRow.Insert = ActiveCell.EntireRow.Select
收件人:
targetSheet.Cells(targetNumRows, 1).EntireRow.Insert
ActiveCell.EntireRow.Copy targetSheet.Cells(targetNumRows, 1)
请注意,按照您的编写方式,它将继续在目标 sheet 的 initial 底部插入行。不确定这对您来说是否是个问题。例如,如果您添加三个新行,它将如下所示:
╔════════════╗
║ TargetData ║
╠════════════╣
║ OldData ║
║ OldData ║
║ NewRow3 ║
║ NewRow2 ║
║ NewRow1 ║
╚════════════╝