将信息从一张纸复制到另一张

时间:2018-04-22 04:38:08

标签: vba excel-vba excel

我试图从一张纸上复制数据,只要满足下面的twp标准。但是,并非所有数据都在传输。在我的代码中,任何人都认为任何东西都是错误的吗?

Private Sub FIlist()
Dim LastRow As Long, fgLastRow As Long
Dim c As Integer

    LastRow = ActiveWorkbook.Sheets("DaysReport").Range("A1000000").End(xlUp).Row
    LastRow = LastRow + 1

Call StartCode

With ActiveWorkbook

For c = 1 To LastRow

If .Sheets("DaysReport").Range("B1").Offset(c - 1, 0) = "ACCEPT" And .Sheets("DaysReport").Range("C1").Offset(c - 1, 0) = "ST" Then
    fgLastRow = ActiveWorkbook.Sheets("FG LIST").Range("A1000000").End(xlUp).Row
    fgLastRow = fgLastRow + 1
    .Sheets("FG LIST").Range("A" & fgLastRow) = .Sheets("DaysReport").Range("A2").Offset(c - 1, 0)
End If

    c = c + 1
Next c

End With

Call EndCode

End Sub

2 个答案:

答案 0 :(得分:0)

你必须摆脱那个

ContainerRequestContext

这使你的循环变量以两步为单位更新!

此外,您可能希望采用以下重构代码:

 c = c + 1

请注意我写道:

Private Sub FIlist()
    Dim cell As Range
    Dim fgSht As Worksheet 

    Set fgSht = ActiveWorkbook.Sheets("FG LIST")

    StartCode

    With ActiveWorkbook.Sheets("DaysReport")
        For Each cell In .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
            If cell.Offset(,1).Value = "ACCEPT" And cell.Offset(,2).Value = "ST" Then fgSht.Cells(fgSht.Rows.Count, 1).End(xlUp).Offset(1).Value = cell.Offset(1).Value
        Next
    End With

    EndCode
End Sub

处理复制当前循环行下面一行A列中的值的代码

如果您确实需要复制A列当前行中的值,那么只需删除最后一行.Offset(1)

答案 1 :(得分:0)

跳出来的第一件事是c也应该是Long

使用ActiveWorkbook可能是一种深思熟虑的设计选择 - 但如果它始终从此工作簿运行,则使用ThisWorkbook。您的用户可以随时更改工作簿或活动窗口,从而导致混乱和混乱(或至少未知或未定义的结果)。

不要使用Call - 现已弃用。不是表演的塞子,但仍然是一个坏习惯。

观察您的索引偏移量,它们可能令人困惑。而不是c-1,而只是提前设置您的起始参数。这意味着我们也删除了几个地点的+1

现在我整理了代码 - 我看到了大佬。而你的问题的原因。我在下面的代码中留下了评论。您处于循环中,并且还增加了cc = c + 1)。这意味着您跳过每隔一行。如果你真的想跳过每一秒,那就使用For c = 0 To LastRow Step 2,因为代码更清晰,你的意图很明显。

Private Sub FIlist()
    Dim LastRow As Long, fgLastRow As Long
    Dim c As Integer
    StartCode
    With ThisWorkbook.Sheets("DaysReport")
        LastRow = .Range("A1000000").End(xlUp).Row
        For c = 0 To LastRow
            If .Range("B1").Offset(c, 0) = "ACCEPT" And .Range("C1").Offset(c, 0) = "ST" Then
                fgLastRow = ThisWorkbook.Sheets("FG LIST").Range("A1000000").End(xlUp).Row + 1
                ThisWorkbook.Sheets("FG LIST").Range("A" & fgLastRow) = .Range("A2").Offset(c, 0)
            End If
            'c = c + 1
        Next c
    End With
    EndCode
End Sub