Vba 某些单元格没有从一个工作簿复制到目标工作簿

Vba 某些单元格没有从一个工作簿复制到目标工作簿,vba,excel,Vba,Excel,如果一行中有高亮显示的单元格,我将尝试将整行从一个工作簿复制到另一个工作簿。我现在看到这些值被放入目标工作簿中不正确的单元格中。我找不到有关信息放置方式的趋势。初始工作簿中的某些单元格可能会填写,也可能不会填写,这很好,但我相信这可能是问题所在,因为我使用的是End(xlUp)。有什么建议吗 基本上,如果突出显示一个单元格,我希望将整行复制到另一个工作簿的不同列中。这是我的密码: Sub Approval_Flow() Dim AppFlowWkb As Workbook, ConfigWkb

如果一行中有高亮显示的单元格,我将尝试将整行从一个工作簿复制到另一个工作簿。我现在看到这些值被放入目标工作簿中不正确的单元格中。我找不到有关信息放置方式的趋势。初始工作簿中的某些单元格可能会填写,也可能不会填写,这很好,但我相信这可能是问题所在,因为我使用的是End(xlUp)。有什么建议吗

基本上,如果突出显示一个单元格,我希望将整行复制到另一个工作簿的不同列中。这是我的密码:

Sub Approval_Flow()
Dim AppFlowWkb As Workbook, ConfigWkb As Workbook
Dim AppFlowWkst As Worksheet, ConfigWkst As Worksheet
Dim aCell As Range, targetRng As Range


Set AppFlowWkb = Workbooks.Open("C:\Users\clara\Documents\Templates\FlowChangeLog.xlsx")
Set ConfigWkb = ThisWorkbook
Set AppFlowWkst = AppFlowWkb.Sheets("Editor")
Set ConfigWkst = ConfigWkb.Worksheets("Flows")


'looking through each column value before moving on to next row
For Each aCell In ConfigWkst.Range("A7:K" & ConfigWkst.UsedRange.Rows.Count)
    'if cell is highlighted, copy that row's column D value
    If Not aCell.Interior.Color = RGB(255, 255, 255) Then
        'requesting office
        Set targetRng = AppFlowWkst.Range("A" & Rows.Count).End(xlUp).Offset(1)
        targetRng.Value = ConfigWkst.Range("D" & (aCell.Row)).Value
        'type
        Set targetRng = AppFlowWkst.Range("B" & Rows.Count).End(xlUp).Offset(1)
        targetRng.Value = ConfigWkst.Range("C" & (aCell.Row)).Value
        '1
        Set targetRng = AppFlowWkst.Range("C" & Rows.Count).End(xlUp).Offset(1)
        targetRng.Value = ConfigWkst.Range("E" & (aCell.Row)).Value
        '2
        Set targetRng = AppFlowWkst.Range("E" & Rows.Count).End(xlUp).Offset(1)
        targetRng.Value = ConfigWkst.Range("F" & (aCell.Row)).Value
        '3
        Set targetRng = AppFlowWkst.Range("G" & Rows.Count).End(xlUp).Offset(1)
        targetRng.Value = ConfigWkst.Range("G" & (aCell.Row)).Value
        '4
        Set targetRng = AppFlowWkst.Range("I" & Rows.Count).End(xlUp).Offset(1)
        targetRng.Value = ConfigWkst.Range("H" & (aCell.Row)).Value
        '5
        Set targetRng = AppFlowWkst.Range("K" & Rows.Count).End(xlUp).Offset(1)
        targetRng.Value = ConfigWkst.Range("I" & (aCell.Row)).Value
        '6
        Set targetRng = AppFlowWkst.Range("M" & Rows.Count).End(xlUp).Offset(1)
        targetRng.Value = ConfigWkst.Range("J" & (aCell.Row)).Value
        '7
        Set targetRng = AppFlowWkst.Range("O" & Rows.Count).End(xlUp).Offset(1)
        targetRng.Value = ConfigWkst.Range("K" & (aCell.Row)).Value
    End If
Next aCell
AppFlowWkst.Range("A:S").RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes

End Sub

在当前代码中,来自相同源行的单元格可能分散在不同的目标行上。此外,还多次复制某些源行(当一行有许多高亮显示的单元格时)。您需要的是:

1-仅获取一次目标行并使用它,然后在每次复制后递增它。该行应该是目标工作表中的“最后”非空行。您可以循环查找最大值,但“轻量级”解决方案是使用
UsedRange
之后的第一行

2-此外,您需要避免多次复制同一源行。为此,可以在迭代过程中跟踪上次复制的源行

' get the first target row once before starting the transfer
Dim targetRow as Long, lastCopiedRow as long
targetRow = AppFlowWkst.UsedRange.row + AppFlowWkst.UsedRange.Rows.Count

For Each aCell In ConfigWkst.Range("A7:K" & ConfigWkst.UsedRange.Rows.Count)
    If aCell.Interior.Color <> RGB(255, 255, 255) And aCell.row > lastCopiedRow Then
        ' office                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        Set targetRng = AppFlowWkst.Range("A" & targetRow) 
        targetRng.Value = ConfigWkst.Range("D" & (aCell.Row)).Value
        'type
        Set targetRng = AppFlowWkst.Range("B" & targetRow)
        targetRng.Value = ConfigWkst.Range("C" & (aCell.Row)).Value

        ' ... etc

        targetRow = targetRow + 1 ' <-- Increment the target row after each transfer
        lastCopiedRow = aCell.Row ' <-- also save this to avoid recopying the same row
    End If
Next aCell
“在开始传输之前获取第一个目标行一次
变暗目标变长,最后一次复制变长
targetRow=AppFlowkst.UsedRange.row+AppFlowkst.UsedRange.Rows.Count
对于ConfigWkst.Range中的每个aCell(“A7:K”&ConfigWkst.UsedRange.Rows.Count)
如果aCell.Interior.Color RGB(255、255、255)和aCell.row>lastCopiedRow,则
“办公室^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
设置targetRng=appflowkst.Range(“A”和targetRow)
targetRng.Value=ConfigWkst.Range(“D”和(aCell.Row)).Value
'类型
设置targetRng=appflowkst.Range(“B”和targetRow)
targetRng.Value=ConfigWkst.Range(“C”&(aCell.Row)).Value
' ... 等

谢谢你。当我使用此代码时,没有将任何内容复制到目标工作簿。我有点困惑为什么要定义targetRow?@gksdmsgP
targetRow
是您要复制到的行。我们需要它,以便来自同一源行的不同单元格不会分散在目标中的不同行上。这是因为你说有些单元格可能是空的,这是有道理的。但是,没有任何内容被复制到目标。我使用了step-into函数,看到and-aCell.row>lastCopiedRow不允许行的其余部分进入if语句,所以我认为是这样的:Set-targetRng=appflowkst.Range(“A”&targetRow)targetRng.Value=ConfigWkst.Range(“D”&(aCell.row))。Value@gksdmsgP这真令人费解。您是否检查变量并检查为什么不满足
条件?
aCell.Row
lastCopiedRow
的值是多少?我从单元格406开始跟踪aCell.Row和lastCopiedRow以及targetRow。我修改了代码以适应我的。非常感谢你!