2016-07-22 73 views
0

Ich habe einen VBA-Code, der Zeilen auf einem Blatt in ein anderes Blatt kopiert, abhängig davon, ob Spalte A = 1 ist und perfekt funktioniert. Ich versuche, es in die nächste verfügbare Zeile einzufügen, anstatt die bereits vorhandenen Daten zu überschreiben, um ein Protokoll zu erstellen. Hier ist der Code, den ich bereits habe, aber ich kann nicht herausfinden, wie man ihn in die nächste verfügbare Zeile einfügen kann. Jede Hilfe würde sehr geschätzt werden! Danke im Voraus!VBA- Wie kopiere und füge ich Werte in ein anderes Blatt ein, beginnend mit der nächsten verfügbaren Zeile

Sub Log() 
Dim rng As Range 
Dim lastRow As Long 
Dim cell As Variant 
Dim count As Long 
count = 0 
    With ActiveSheet 

lastRow = .Range("A" & .Rows.count).End(xlUp).Row 
Set rng = .Range("A3:A" & lastRow) 

For Each cell In rng 
    If cell.Value = "1" Then 
     Range(cell.Offset(0, 1), cell.Offset(0, 6)).Copy 
     Range("'Log'!B3").Offset(count, 0).PasteSpecial xlPasteValues 
     count = count + 1 
    End If 
Next 
End With 
End Sub 
+0

Kennen Sie die Verwendung von .Cells (row #, col #) anstelle von Range (A1)? – peege

+1

'Bereich (" 'Log'! B3 "). Offset (count, 0) .PasteSpecial xlPasteValues' ist falsche Syntax. Probiere 'Sheets (" Log! B3 "). Range (" A1 "). Offset (Anzahl, 0) .PasteSpecial xlPasteValues ​​ –

+0

Die Antwort von @peege funktioniert wie ein Zauber. Vielen Dank! Ich fange gerade an zu programmieren, und das hilft mir sehr! –

Antwort

0

Sie müssen nur das Quellblatt durchlaufen.

Versuchen .Cells (Zeile, Spalte) anstelle des Bereichs mit ..

Dieses Beispiel auf den Kommentaren ist schwer den Schleifenprozess zu helfen, zu verstehen.

Sie benötigen ein paar zusätzliche Funktionen, damit dies mit diesem Code funktioniert.

LastRow Funktion

Function lastRow(sheet As String) As Long 

    lastRow = Sheets(sheet).Cells(Rows.Count, "A").End(xlUp).Row 'Using Cells() 

End Function 

LASTCOL Funktion

Function lastCol(sheet As String) As Long 

    lastCol = Sheets(sheet).Cells(2, Columns.Count).End(xlToLeft).Column 

End Function 

-Code für Lösung: Angenommen, Sie Ihre Zielblatt der Header bereits aufgebaut und die Ziel- und Quellblatt Aktie haben die gleiche Formatierung.

Sub Log() 

Dim source As String, target As String 
Dim sRow As Long, col As Long, tRow As Long 

'Declare Sheets 
source = "Sheet1" 
target = "Sheet2" 

'Loop through rows of source sheet 
For sRow = 2 To lastRow(source) 

    'Get current last row of Target Sheet 
    tRow = lastRow(target) + 1 

    'Meet criteria for Column A to = 1 on Source 
    If Sheets(source).Cells(sRow, 1) = "1" Then 
     'Copy each column of source sheet to target sheet in same order 
     For col = 1 To lastCol(source) 
      Sheets(target).Cells(tRow, col) = Sheets(source).Cells(sRow, col) 
     Next col 
    End If 

Next sRow 

End Sub