2017-11-01 12 views
0

私は、アーカイブのマクロを作成しています。正しいセル値を持つ行を選択し、別のタブに移動します(元のタブの行を削除しています)。マクロが完全に実行されません

マクロは完全に正常に動作していましたが、ファイルを変更して別の新しいタブを使用することにしました。私は私の新しいタブで私のマクロを計算し、それが正しい行上で動作し、それらを削除しますが、私の「アーカイブタブ」でそれらをコピーしない場合:

Sub Archive_Ongoing() 

Test 2 : works for 2 arguments. 

    Dim xRg As Range 
    Dim xCell As Range 
    Dim I As Long 
    Dim J As Long 
    Dim K As Long 
    I = Worksheets("B90_Projects_OnGoing").UsedRange.Rows.Count 
    J = Worksheets("B90_Projects_Archived").UsedRange.Rows.Count 

    If J = 1 Then 
     If Application.WorksheetFunction.CountA(Worksheets("B90_Projects_Archived").UsedRange) = 0 Then J = 0 
    End If 
    Set xRg = Worksheets("B90_Projects_OnGoing").Range("O1:O" & I) 
    Set yRg = Worksheets("B90_Projects_OnGoing").Range("T1:T" & I) 
    On Error Resume Next 
     Application.ScreenUpdating = False 
    For K = 1 To xRg.Count 
     If CStr(xRg(K).Value) = "Closed" And CStr(yRg(K).Value) <> "" Then 
      xRg(K).Selection.Copy Destination:=Worksheets("B90_Projects_Archived").Range("A" & J + 1) 
      xRg(K).EntireRow.Delete 
      If CStr(xRg(K).Value) = "Closed" Then 
       K = K - 1 
      End If 
      J = J + 1 
     End If 
    Next 
    Application.ScreenUpdating = True 

End Sub' 

いずれも、理由を説明することができるだろうか?

+0

'XRG(K:あなたが評価する目的でこれをやっている場合は

/そして、あなたはこのようにインクリメントK2変数を持っている場合があります単一の行を削除し、アップ次の値をシフト( "A"&J + 1) 'が選択をコピーしようとしていて、あなたのコードで何も選択されていません...もしあなたがそれを手動で選択し、マクロを実行していますか? – Maldred

+3

'On Error Resume Next'を削除して、コードを行ごとにデバッグすると、**あなたの問題が非常に迅速に**見つかります。解決できない場合は、具体的な内容(つまり、エラーの行と問題解決のために何を試したか)を使って質問を更新してください。また、範囲から行を削除する場合は、範囲を逆方向にループする必要があります。 –

+0

この行 'xRg(K).Selection.Copy ....'はエラー438を投げます....あなたのコードはおそらくそれのために働くことはできません – jsotola

答えて

0

FORループ内の変数Kをデクリメントしているため、これも増分しています。あなたのK変数は決して変化しません。 K = K - 1をコメントアウトして報告しますか?

For K = 1 To xRg.Count 
    If CStr(xRg(K - K2).Value) = "Closed" And CStr(yRg(K - K2).Value) <> "" Then 
     xRg(K - K2).Selection.Copy Destination:=Worksheets("B90_Projects_Archived").Range("A" & J + 1) 
     xRg(K - K2).EntireRow.Delete 
     If CStr(xRg(K - K2).Value) = "Closed" Then 
      K2 = K2 + 1 
     End If 
     J = J + 1 
    End If 
Next 
関連する問題