2016-06-13 8 views
0

Ich kopiere große Mengen von gefilterten Daten (nur sichtbare Daten und Werte) von einer Arbeitsmappe zu einer anderen, aber der Prozess ist sehr langsam. Ich möchte versuchen, die Zwischenablage zu umgehen, um zu sehen, ob das die Geschwindigkeit verbessert, aber ich bekomme immer den Fehler "Objekt unterstützt diese Eigenschaft oder Methode nicht". Hier ist der Code, der fehlschlägt:VBA - Kopieren gefilterter Datenwerte von einer Arbeitsmappe in eine andere

ActiveSheet.SpecialCells(xlCellTypeVisible).Copy _ 
    Destination:=Windows("Some Report").Worksheets(_ 
           "Some Sheet").Range("A1").Values 

Ich habe verschiedene Varianten ausprobiert, aber den gleichen Fehler erhalten. Vielen Dank im voraus für Ihre Hilfe.

+0

Ich konnte nicht so arbeiten, wie ich wollte. Was ich zur Arbeit gebracht habe, war, einfach einen Bereich gleich einem anderen zu setzen; Arbeitsmappe ("Einige Berichte"). Arbeitsblätter ("Einige Blätter"). Bereich ("A1: ZZ100"). Werte = Arbeitsmappe ("Einige Berichte 2"). Arbeitsblätter ("Einige Blatt 2"). Bereich ("A1: ZZ100 "). Werte. Das funktioniert gut, aber ich konnte es nicht mit gefilterten Bereichen arbeiten. Wer kann das, ohne jede sichtbare Reihe durchfahren zu müssen? – Peter

Antwort

0

Ich habe dies ohne tatsächlich die SpecialCells (xlCellTypeVisible) -Methode, und es kopiert und fügt perfekt eingefügt. Zuerst filtere ich die Daten mit einem Array, dann benutze ich einfach die Arbeitsblätter ("Sheet1"). Range ("A1:" & letzte Spalte & letzte Zeile) .Ziel des Kopierers: = Arbeitsblätter ("Sheet2"). Bereich ("E5 ") Methode und es funktioniert gut auf Office 2010. Ich habe in die SpecialCells (xlCellTypeVisible) -Methode untersucht, aber es war nie notwendig.

Vielleicht, wenn Sie UsedRange.SpecialCells (xlCellTypeVisible) setzen. Kopieren würde es funktionieren?

0

Wie wäre es, wenn Sie einfach den cells.value gleich setzen? In diesem kleinen Snippet wird davon ausgegangen, dass Sie die Zellen in dieselbe Zielzelle kopieren möchten. Sie müssen sich also darauf einstellen, wenn Sie das nicht tun.

Private Sub worksheet_selectionchange(ByVal Target As Range) 

    Dim lastRow As Integer 
    Dim lastCol As Integer 

    Dim wb1 As Workbook 
    Dim ws1 As Worksheet 
    Dim ws2 As Worksheet 

    Set wb1 = ThisWorkbook 
    Set ws1 = wb1.Sheets(1) 
    Set ws2 = wb1.Sheets(2) 

    lastRow = ws1.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
    lastCol = ws1.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Column 

    For i = 1 To lastRow: For j = 1 To lastCol 
     If ws1.Cells(i, j).Value > 5 And Not ws1.Cells(i, j).Hidden Then 
      ws2.Cells(i, j).Value = ws1.Cells(i, j).Value 
     End If 
    Next: Next 

End Sub 

Leider ohne viel anderes Ihres Codes zu sehen, kann ich nicht viel beweisen sonst, aber das ist die einzige Alternative zum Kopieren und Einfügen, die ich kenne.