2016-06-23 4 views
0

Die For Next-Schleife in meinem Code soll 1 Zeile von numerischen Daten 19 Spalten breit, eine Reihe nach der anderen, aus irgendeinem Grund die erste Zeile der Quelle zu kopieren Datei wird zweimal kopiert (für i = 1 und i = 2), dann zweimal für die zweite Zeile in den Quelldaten (i = 3 und 4) Zeilennummervariablen werden schrittweise für jede Schleife erhöht. Alle Ideen, was ich falsch mache, noch einmal Vielen Dank im Voraus für jede HilfeExcel VBA - für die nächste Schleife kopiert die gleiche Zeile mehrere Male

Option Explicit

Sub CopyColumnTest() 

Const FILE1 As String = "c:\users\john\documents\cvi - excel files\project - Cash Drawer Report\New Folder\PreFlashSales.xls" 
Const FILE2 As String = "c:\users\john\documents\cvi - excel files\project - Cash Drawer Report\New Folder\2016 Flash Sales-JFP.xls" 
Const Sheet1 As String = "Sheet1" 
Const Sheet2 As String = "Actual" 
Dim Col As Integer 
Dim Col1 As Integer 
Dim Col2 As Integer 
Dim Col3 As Integer 
Dim RowNum As Integer 
Dim RowNum1 As Integer 
Dim RowNum2 As Integer 
Dim LastRow1 As Integer 
Dim LastRow2 As Integer 
Dim wb1 As Workbook, wb2 As Workbook 
Dim i As Integer 

i = 1 
Col = 5 
Col1 = 1 
Col2 = 23 
Col3 = 19 

RowNum = 1 


If wb1 Is Nothing Then Set wb1 = Workbooks.Open(FILE1) 

If wb2 Is Nothing Then Set wb2 = Workbooks.Open(FILE2) 


LastRow1 = wb1.Sheets(Sheet1).Cells(Rows.Count, "A").End(xlUp).row 'Last Row of Data in PreFlashSales Workbook 

LastRow2 = wb2.Sheets(Sheet2).Cells(Rows.Count, "E").End(xlUp).row + 1 'Last Row of Data Previously Added in 2016 FlashSales-JFP 
RowNum1 = LastRow2 

    With wb1.Sheets(Sheet1) 

     For i = 1 To LastRow1 

     *** wb2.Sheets(Sheet2).Range(wb2.Sheets(Sheet2).Cells(RowNum1, Col), wb2.Sheets(Sheet2).Cells(RowNum1, Col2)).Value = _ 
      wb1.Sheets(Sheet1).Range(wb1.Sheets(Sheet1).Cells(RowNum, Col1), wb1.Sheets(Sheet1).Cells(RowNum & Col3)).Value *** 

      RowNum = RowNum + 1 
      RowNum1 = RowNum1 + 1 
     Next i 

    End With 

End Sub 

Antwort

0

Wenn eine direkte tun Zuweisung Sie nicht Schleife benötigen, können Sie nur den Wert in der Masse zuweisen und direkt:

Sub CopyColumnTest() 

Const FILE1 As String = "c:\users\john\documents\cvi - excel files\project - Cash Drawer Report\New Folder\PreFlashSales.xls" 
Const FILE2 As String = "c:\users\john\documents\cvi - excel files\project - Cash Drawer Report\New Folder\2016 Flash Sales-JFP.xls" 
Const Sheet1 As String = "Sheet1" 
Const Sheet2 As String = "Actual" 
Dim Col As Long 
Dim Col1 As Long 
Dim Col2 As Long 
Dim Col3 As Long 
Dim LastRow1 As Long 
Dim LastRow2 As Long 
Dim wb1 As Workbook, wb2 As Workbook 
Dim ws1 As Worksheet 
Dim ws2 As Worksheet 


Col = 5 
Col1 = 1 
Col2 = 23 
Col3 = 19 


If wb1 Is Nothing Then Set wb1 = Workbooks.Open(FILE1) 
If wb2 Is Nothing Then Set wb2 = Workbooks.Open(FILE2) 

'assign the sheets to variables to save typing 
Set ws1 = wb1.Sheets(Sheet1) 
Set ws2 = wb2.Sheets(Sheet2) 

LastRow1 = ws1.Cells(Rows.Count, "A").End(xlUp).Row 'Last Row of Data in PreFlashSales Workbook 

LastRow2 = ws2.Cells(Rows.Count, "E").End(xlUp).Row + 1 'Last Row of Data Previously Added in 2016 FlashSales-JFP 


    With ws1 
     ' when using With any object that is part of the with you just need to use '.' in front 
     ws2.Range(ws2.Cells(LastRow2, Col), ws2.Cells(LastRow1 + LastRow2, Col2)).Value = .Range(.Cells(1, Col1), .Cells(LastRow1, Col3)).Value 
    End With 

End Sub 

Wie, warum Sie das Kopieren von zwei Linien Blick auf dem letzten Teil von Ihnen Assignation Statement wb1.Sheets(Sheet1).Cells(RowNum & Col3)) Sie haben ein & anstelle von ,. Ist sollte wb1.Sheets(Sheet1).Cells(RowNum, Col3))

+0

Vielen Dank für Ihre Hilfe, arbeitete perfekt – John

+0

@John bitte als richtig markieren. Klicken Sie auf das Häkchen bei der Antwort. Es ist etwas, was nur du tun kannst. –

+0

Scott Danke nochmal !! - Jetzt weiß ich, wie man große Hilfe anerkennt – John

Verwandte Themen