2016-11-22 3 views
0

Je travaille sur le script ci-dessous et j'essaie d'extraire des données d'un autre classeur (cible) dans le classeur source. Le script fonctionne, sauf qu'il ne tire qu'une seule ligne (il devrait tirer 12+). Après un certain débogage, j'ai remarqué qu'il écrasait juste la ligne précédente, donc je me retrouve avec la dernière rangée des données de la cible. Je ne sais pas pourquoi c'est ce qu'il fait. Je n'ai aucune cellule fusionnée et il n'y a rien dans le classeur source.Script VBA Ne pas extraire des données - Chevauchement

Voici le code:

Select Code 
    Dim salesWB As Workbook 
    Dim mrpWB As Workbook 
    Dim Ret As Boolean 
    Dim SalesStaging As String, SW As Range   

    SalesStaging = "SalesStaging.xlsm" 
    Set salesWB = Workbooks.Open(SalesStaging) 
    Set salesWB = Workbooks("SalesStaging.xlsm") 
    Set mrpWB = ThisWorkbook 


    With salesWB.Worksheets("SendToMRP") 
     For Each SW In .Range(.Cells(2, 1), .Cells(Rows.count, 1).End(3)) 
      With mrpWB.Worksheets("Sales & Returns").Cells(Rows.count, 1).End(xlUp) 
       .Offset(1, 1) = SW.Offset(0, 0) ' OrderId 
       .Offset(1, 2) = SW.Offset(0, 1) ' StoreFront 
       .Offset(1, 3) = SW.Offset(0, 2) ' OrderType 
       .Offset(1, 4) = SW.Offset(0, 3) ' PurchaseDate 
       .Offset(1, 5) = SW.Offset(0, 4) ' ShipmentServiceLabelCategory 
       .Offset(1, 6) = SW.Offset(0, 5) ' Title 
       .Offset(1, 7) = SW.Offset(0, 6) ' SellersSKU 
       .Offset(1, 8) = SW.Offset(0, 7) ' QtySold 
       .Offset(1, 9) = SW.Offset(0, 8) ' ShippingCost 
       .Offset(1, 10) = SW.Offset(0, 9) ' Discounts 
       .Offset(1, 11) = SW.Offset(0, 10) ' ItemPrice 
       ' .Offset(0, 0) = SW.Offset(0, 11) ' OrderTotal 
       .Offset(1, 20) = SW.Offset(0, 12) ' LatestShipDate 
       .Offset(1, 21) = SW.Offset(0, 13) ' SAState 
       .Offset(1, 22) = SW.Offset(0, 14) ' SACity 
       .Offset(1, 23) = SW.Offset(0, 15) ' SAPhone 
       .Offset(1, 24) = SW.Offset(0, 16) ' SAPostalCode 
       .Offset(1, 25) = SW.Offset(0, 17) ' SAName 
       .Offset(1, 26) = SW.Offset(0, 18) ' SAddress 
       .Offset(1, 27) = SW.Offset(0, 19) ' IsPrime 
      End With 
     Next 
    End With 
+0

Vous utilisez le global objet 'rows' - ​​vous devez utiliser' mrpWB.Worksheets ("Sales & retours"). Rows.Count'. – Comintern

Répondre

1

Vous déterminez la ligne à écrire par la recherche de la dernière cellule non vide dans la colonne A, mais vous n'écrire quoi que ce soit à la colonne A, donc vous serez toujours sélectionner la même ligne à chaque fois dans la boucle.

les opérations suivantes:

Dim salesWB As Workbook 
Dim mrpWB As Workbook 
Dim Ret As Boolean 
Dim SalesStaging As String, SW As Range   

SalesStaging = "SalesStaging.xlsm" 
Set salesWB = Workbooks.Open(SalesStaging) 
Set salesWB = Workbooks("SalesStaging.xlsm") 
Set mrpWB = ThisWorkbook 


With salesWB.Worksheets("SendToMRP") 
    For Each SW In .Range(.Cells(2, 1), .Cells(.Rows.count, 1).End(3)) 
     With mrpWB.Worksheets("Sales & Returns").Cells(mrpWB.Worksheets("Sales & Returns").Rows.count, 2).End(xlUp) 
      .Offset(1, 0) = SW.Offset(0, 0) ' OrderId 
      .Offset(1, 1) = SW.Offset(0, 1) ' StoreFront 
      .Offset(1, 2) = SW.Offset(0, 2) ' OrderType 
      .Offset(1, 3) = SW.Offset(0, 3) ' PurchaseDate 
      .Offset(1, 4) = SW.Offset(0, 4) ' ShipmentServiceLabelCategory 
      .Offset(1, 5) = SW.Offset(0, 5) ' Title 
      .Offset(1, 6) = SW.Offset(0, 6) ' SellersSKU 
      .Offset(1, 7) = SW.Offset(0, 7) ' QtySold 
      .Offset(1, 8) = SW.Offset(0, 8) ' ShippingCost 
      .Offset(1, 9) = SW.Offset(0, 9) ' Discounts 
      .Offset(1, 10) = SW.Offset(0, 10) ' ItemPrice 
      ' .Offset(0, 0) = SW.Offset(0, 11) ' OrderTotal 
      .Offset(1, 19) = SW.Offset(0, 12) ' LatestShipDate 
      .Offset(1, 20) = SW.Offset(0, 13) ' SAState 
      .Offset(1, 21) = SW.Offset(0, 14) ' SACity 
      .Offset(1, 22) = SW.Offset(0, 15) ' SAPhone 
      .Offset(1, 23) = SW.Offset(0, 16) ' SAPostalCode 
      .Offset(1, 24) = SW.Offset(0, 17) ' SAName 
      .Offset(1, 25) = SW.Offset(0, 18) ' SAddress 
      .Offset(1, 26) = SW.Offset(0, 19) ' IsPrime 
     End With 
    Next 
End With 
+0

Merci! J'apprécie vraiment cela!! – Twigs