【发布时间】:2017-10-04 19:01:45
【问题描述】:
如果 AG_Label = M_Label 代码运行并粘贴,但仅适用于第一个实例。 我的循环有问题,但我对 VBA 很陌生,所以我不知道如何修复它。
Dim mrow As Long, ARow As Long, iRows As Long, srow As String
Dim x As Long, j As Long, i As Long
Dim AG_Label As String, AG_val As String, SNL_val As String, SNL_Label As String, M_Label As String, Rng As Range
Dim Vval As Long, Speriod As String, aperiod As String
Dim Count As Integer, Ajay As Variant
Count = 2
ARow = Sheets("AG").Range("A" & Rows.Count).End(xlUp).Row
Do
For i = 2 To ARow
AG_Label = Sheets("AG").Cells(i, "N").Value
'mrow = Sheets("Mappings").Range("A" & Rows.count).End(xlUp).Row
'For j = 2 To mrow
'M_Match_1 = Sheets("Mappings").Cells(j, "P").Value
M_Label = Sheets("Mappings").Cells(Count, "C").Value
If AG_Label = M_Label And Sheets("Mappings").Cells(Count, "L").Value = "FRY-9C" Then
Sheets("Mappings").Cells(Count, "J").copy
Sheets("AG").Cells(i, "AM").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
On Error Resume Next
End If
Application.CutCopyMode = False
Next
'i = i + 1
Loop Until i = ARow + 1
Count = Count + 1
End Sub
【问题讨论】:
-
对于初学者,修复这一行 -
ARow = Sheets("AG").Range("A" & Rows.Count).End(xlUp).Row并带有对这样的行的限定引用 -ARow = Sheets("AG").Range("A" & Sheets("AG").Rows.Count).End(xlUp).Row -
您在
End Sub之前的Count = Count + 1似乎很可疑 - 绝对没有必要增加过程级变量然后通过退出过程来丢弃它。那应该在你的循环中的某个地方吗? -
注释掉
On Error Resume Next除非有充分的理由。 -
你的
Do...Loop Until i = ARow + 1是没有意义的——i在遇到Loop语句时的值将是ARow + 1,所以Do循环正在执行恰好一次 - 永远不会更少,永远不会更多。 -
@YowE3K 是的,那里有问题。它查看 AG_Label 但是当它完成到最后一行时,我如何增加 M_Label 以便再次通过相同的 If 语句获取新的 M_label 值
标签: arrays string vba loops copy-paste