2017-03-28 1 views
1

zu kopieren Ich habe Code, der durch mein Arbeitsblatt durchlaufen wird, aber es führt alle Zeilen und nicht nur die Zeilen nach meinen Kriterien kopiert. Wie sollte ich nur die Zeile kopieren, die ich möchte?Schleifen durch Zeilen, um eins basierend auf Bedingung

Sub Major2_Paster() 

Dim LastRow As Integer 
Dim i As Integer 
Dim erow As Integer 

LastRow = Cells(Rows.count, 1).End(xlUp).Row 

For i = 2 To LastRow 
If Cells(i, 12) = “MLA” Then 
range(Cells(i, 1), Cells(i, 21)).Select 
Selection.Copy 

Workbooks.Open Filename:="H:\Degrees List\Sorted_Workbooks\MLA Mar-17.xlsx" 
erow = ActiveSheet.Cells(Rows.count, 1).End(xlUp).Offset(1, 0).Row 

ActiveSheet.Cells(erow, 1).Select 
ActiveSheet.Paste 
ActiveWorkbook.Save 
ActiveWorkbook.Close 
Application.CutCopyMode = False 

End If 

Next i 
End Sub 
+0

den Code arbeiten? Wenn ja dann gehört diese Frage auf http://codereview.stackexchange.com/ Wenn nicht, dann war es ein Fehler? –

+0

@ScottCraner Ich bin mir nicht ganz sicher, ich habe so viele Codezeilen, dass ich das Programm stoppen musste, weil es so langsam lief. Lass es mich mit einer kleineren Größe versuchen und finde es heraus. – Cocoberry2526

+0

@ScottCraner Ich habe es gerade getestet den Code es funktioniert tatsächlich nicht. Anstatt die Zeile basierend auf den Kriterien zu suchen, die ich suche und in die gewünschte Arbeitsmappe einfüge, kopiert sie alle Zeilen über – Cocoberry2526

Antwort

2

Ein paar Dinge:

  • Nur die Arbeitsmappe öffnen einmal, wird dies die bedeutendste Leistungssteigerung
  • Verweise auf Arbeitsmappen/Arbeitsblätter erstellen, anstatt ActiveSheet/ActiveWorkbook
  • mit
  • Einrückung ist so wichtig. Es macht Code so viel besser lesbar und es ist der erste Schritt, um Ihre eigenen Fehler bei der Suche nach

Sub Major2_Paster() 
    Dim LastRow As Integer, i As Integer, erow As Integer 
    Dim destinationWorkbook As Workbook 
    Dim sourceWorksheet As Worksheet, destinationWorksheet As Worksheet 

    Set destinationWorkbook = Workbooks.Open(Filename:="H:\Degrees List\Sorted_Workbooks\MLA Mar-17.xlsx") 

    Set sourceWorksheet = ThisWorkbook.Worksheets("SheetName") 
    Set destinationWorksheet = destinationWorkbook.Worksheets("SheetName") 

    With sourceWorksheet 
     LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row 
    End With 

    For i = 2 To LastRow 
     If sourceWorksheet.Cells(i, 12).Value = “MLA” Then 
      With destinationWorksheet 
       erow = .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Row 
      End With 
      destinationWorksheet.Cells(erow, 1).Resize(1, 21).Value = sourceWorksheet.Range(sourceWorksheet.Cells(i, 1), sourceWorksheet.Cells(i, 21)).Value 
     End If 
    Next i 
    destinationWorkbook.Close SaveChanges:=True 

    Application.CutCopyMode = False 
End Sub 
+0

Ihr Code und Ratschläge waren sehr hilfreich! Mein einziges Problem ist, dass die Zeile nicht kopiert und in die andere Arbeitsmappe eingefügt wird. Müsste ich eine spezielle Paste machen? Ich stellte sicher, dass die Kriterien in der richtigen Spalte waren, also bin ich mir nicht sicher, ob es nicht die Zeile kopiert oder es nicht einfügt – Cocoberry2526

+0

Sie haben einige "MLA" s in Spalte 12 sicher? (Das ist die Spalte 'L') – CallumDA

+0

Ja, ich teste den Code in einer Beispieldatei mit nur 5 Zeilen, also fügte ich ein paar in – Cocoberry2526

Verwandte Themen