2017-10-25 2 views
0

Ich hatte ein Stück Code für eine VBA-Kopie-einfügen-Schleife, die ich seit eineinhalb Jahren ohne Probleme verwendet, die plötzlich nicht korrekt ausgeführt wird. Die Absicht ist, eine bestimmte Spalte mit ein paar eindeutigen Werten zu nehmen und diese Filter in neue Blätter einzufügen, die den Namen eindeutiger Werte annehmen. Jetzt scheint plötzlich ein Problem mit dem filternden Teil davon zu sein - wenn ich das Makro ausführe, wird es ohne irgendwelche Fehler ausgeführt, aber es gelingt mir nicht wirklich irgendetwas zu kopieren und einzufügen oder irgendwelche neuen Blätter zu erstellen. Die einzige Sache, die passiert, ist das Kopieren der eindeutigen Werte in die CO-Spalte, aber die nachfolgende Schleife funktioniert aus irgendeinem Grund nicht richtig.VBA Kopieren Einfügen Schleife nicht korrekt ausgeführt

Soweit ich feststellen kann, gab es keine unbeabsichtigten Änderungen in meinem Code oder in der Formatierung der Berichte, mit denen ich diese (tägliche, dynamische Bereiche) laufen, so dass ich wirklich ratlos bin, was möglicherweise alles anders sein könnte von dem plötzlichen.

Der Bereich der zu kopierenden Werte ist A1: CN mit einer dynamischen Anzahl von Zeilen und die Spalte mit den zu filternden eindeutigen Werten ist U. Alle Ideen, warum es möglicherweise nicht funktioniert?

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

Ich denke, für den Anfang ein Blatt Referenz hinzufügen sollte, wenn Sie ein neues Blatt hinzufügen, wird es das aktive Blatt und der Code wird standardmäßig, dass verweisen. – SJR

+0

Welche Excel-Version verwenden Sie? Ich habe diese Art von Problemen mit Excel 2010 erlebt. –

+0

FYI: '.SpecialCells (xlCellTypeVisible)' wird nicht benötigt. '.Copy' kopiert nur sichtbare Zeilen. –

Antwort

0

Also - es ist selbst aufgelöst, nachdem ich alle Excel-Tabellen geschlossen und wieder geöffnet. Aber jetzt bin ich neugierig, ob irgendjemand weiß, warum das überhaupt passiert ist? Gibt es ein Problem, bei dem sich der Code selbst abschneidet, wenn der Arbeitsspeicher von Excel knapp ist?

+0

Dies ist keine Antwort und sollte nicht als eine gesendet werden. Wenn Sie zusätzliche Informationen hinzufügen möchten, bearbeiten Sie stattdessen Ihre Frage und fügen Sie sie dort hinzu. Dieser Platz ist nur für eine bestimmte Verwendung vorgesehen. Dies wird deutlich durch die fettgedruckte Beschriftung über Ihrer Antwort ** angezeigt. SO ist kein Chatraum oder eine Diskussionsgruppe oder ein Forum. –

1

Sie verlassen sich in Ihrem Code auf ActiveSheet, alle Ihre Objekte, wie Set rng = Range("A1:CN" & LR) und Range("U1:U" & LR).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("CO1"), Unique:=True sind nicht mit einem Arbeitsblatt qualifiziert.

Sie müssen eine With Worksheets("Sheet1")-Anweisung am Anfang Ihres Codes hinzufügen, dann qualifizieren Sie alle verschachtelten Objekte mit einer ., und es sollte gut funktionieren.

-Code

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 
Verwandte Themen