2017-10-04 66 views
0

如果AG_Label = M_Label,代码将运行并粘贴,但仅限于第一个实例。 我的循环有问题,但我对VBA很新,所以我不知道如何解决它。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 
+0

对于初学者来说,解决这个线 - 'AROW =表(“公司”)范围(“A”和Rows.Count).END (xlUp).Row'有一个像这样的行的限定引用 - 'ARow = Sheets(“AG”)。Range(“A”&Sheets(“AG”).Rows.Count).End(xlUp).Row' – braX

+0

您的'Count = Count + 1'紧挨在'End Sub'看起来可疑之前 - 绝对没有任何一点递增过程级变量,然后通过退出p来丢弃它rocedure。这应该在你的循环里面吗? – YowE3K

+1

注释掉'On Error Resume Next',除非有很好的理由。 –

回答

0

这可能不是你想要什么,但它应该给你如何在循环中构建一个环一个更好的主意:

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 Long, Ajay As Variant 

    ARow = Sheets("AG").Range("A" & Sheets("AG").Rows.Count).End(xlUp).Row 
    mrow = Sheets("Mappings").Range("A" & Sheets("Mappings").Rows.count).End(xlUp).Row 
    For i = 2 To ARow 
     On Error Resume Next 
     AG_Label = Sheets("AG").Cells(i, "N").Value 
     On Error GoTo 0 
     For Count = 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 
      End If  
     Next 
    Next 
    Application.CutCopyMode = False 
End Sub 

注:我认为使用错误掩盖变量AG_Label的设置是一个坏的,不好的想法。 (这意味着您将通过具有相同值AG_Label的循环执行多次,直到您遇到从N列中获得新的有效值的情况。)下面是一些替代代码,用于停止处理诸如#N/A ,这是我怀疑你可能已经想了On Error为:

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 Long, Ajay As Variant 

    ARow = Sheets("AG").Range("A" & Sheets("AG").Rows.Count).End(xlUp).Row 
    mrow = Sheets("Mappings").Range("A" & Sheets("Mappings").Rows.count).End(xlUp).Row 
    For i = 2 To ARow 
     If Not IsError(Sheets("AG").Cells(i, "N").Value) Then 
      AG_Label = Sheets("AG").Cells(i, "N").Value 
      For Count = 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 
       End If  
      Next 
     End If 
    Next 
    Application.CutCopyMode = False 
End Sub