2017-10-25 17 views
0

突然正しく実行されない問題がなく、1年半使用したVBAのコピー貼り付けループのコードがあります。その目的は、いくつかの一意の値を持つ特定の列を取り出し、それらのフィルターを一意の値の名前を持つ新しいシートにコピーしてコピーすることです。マクロを実行すると、エラーが発生しなくても実行されますが、実際に何かをコピーアンドペーストしたり、新しいシートを作成したりすることはできません。 1つのことは、一意の値をCO列にコピーすることですが、後続のループは何らかの理由で正しく機能しません。VBAコピー貼り付けループが正しく実行されない

私のコードや、これを毎日のダイナミックレンジで実行するレポートの書式設定に不注意な変更があったとは限りません。突然の

具体的には、コピーする値の範囲は動的な行数のA1:CNで、フィルタリングするユニークな値を持つ列はUです。なぜそれが機能しないのでしょうか?

Dim rng as Range 
Dim c As Range 
Dim LR As Long 

    LR = Cells(Rows.Count, "A").End(xlUp).Row 
    Set rng = Range("A1:CN" & LR) 

    Range("U1:U" & LR).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("CO1"), Unique:=True 

    For Each c In Range([CO2], Cells(Rows.Count, "CO").End(xlUp)) 
     With rng 
      .AutoFilter 
      .AutoFilter Field:=21, Criteria1:=c.Value 
      .SpecialCells(xlCellTypeVisible).Copy 
      Sheets.Add(After:=Sheets(Sheets.Count)).Name = c.Value 
      ActiveSheet.Paste 
     End With 
    Next c 
+1

私はあなたはそれがアクティブシートになり、コードがデフォルトでそれに参照する新しいシートを追加するときのようにシートの参照を追加する必要があります初心者のためだと思います。 – SJR

+0

どのExcelのバージョンを使用していますか? Excel 2010を使用してこの種の問題が発生しました。 –

+0

FYI: '.SpecialCells(xlCellTypeVisible)'は必要ありません。 '.Copy'は可視行だけをコピーします。 –

答えて

0

すべてのExcelシートを閉じてから再開すると解決します。しかし、なぜこれがどうして起こったのか誰かが知っていれば、私は不思議です。 Excelのメモリが不足している場合、コード自体が切り詰められる問題はありますか?

+0

これは答えではなく、1つとして投稿するべきではありません。追加する追加情報がある場合は、代わりに質問を編集して追加してください。このスペースは、特定の用途に適しています。その上には、** Your Answer **という太字のラベルが明記されています。 SOはチャットルームやディスカッショングループ、フォーラムではありません。 –

1

ActiveSheetのコードに頼っている場合は、Set rng = Range("A1:CN" & LR)Range("U1:U" & LR).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("CO1"), Unique:=Trueなどのすべてのオブジェクトはワークシートの資格がありません。

コードの先頭にWith Worksheets("Sheet1")ステートメントを追加してから、すべてのネストされたオブジェクトを.に修飾する必要があります。正常に動作するはずです。

コード

With Worksheets("Shee1") ' <-- you need this line, modify to your sheet's name 

    LR = .Cells(.Rows.Count, "A").End(xlUp).Row 
    Set rng = .Range("A1:CN" & LR) 

    .Range("U1:U" & LR).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("CO1"), Unique:=True 

    For Each c In .Range(Range("CO2"), .Cells(.Rows.Count, "CO").End(xlUp)) 
     With rng 
      .AutoFilter 
      .AutoFilter Field:=21, Criteria1:=c.Value 
      .SpecialCells(xlCellTypeVisible).Copy 
      Sheets.Add(After:=Sheets(Sheets.Count)).Name = c.Value 
      ActiveSheet.Paste 
     End With 
    Next c 
End With 
関連する問題