我试图从一张纸上复制数据,只要满足下面的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
答案 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
!
现在我整理了代码 - 我看到了大佬。而你的问题的原因。我在下面的代码中留下了评论。您处于循环中,并且还增加了c
(c = 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