2017-10-20 36 views
0

J'ai essayé d'utiliser le code pour calculer TVA et total dans la même ligne E (même ligne que le montant net), mais la réponse de la TVA est beaucoup plus élevée que 20% du montant net. Même problème avec le montant total. Je pense que ces deux chiffres pourraient ramasser d'autres chiffres plutôt que le montant net. Voici une partie de mon code ci-dessous, pourriez-vous s'il vous plaît me donner quelques conseils? Merci beaucoupEssayez de calculer la TVA dans la même ligne de montant net dans E, mais la réponse est correcte

Option Explicit 

Sub copy_info() 
Dim i As Long, j As Long, lastRow As Long 
Dim sh As Worksheet 

With Sheets("Order List") 
.Range("A22:F50").Clear 
.Range("A21") = "PART CODE" 
.Range("B21") = "DESCRIPTION" 
.Range("C21") = "PRICE" 
.Range("D21") = "QUANTITY" 
.Range("E21") = "NET AMOUNT" 
.Range("F21") = "SHEET NAME" 
.Range("A21:F21").HorizontalAlignment = xlCenter 
.Range("A21:F21").VerticalAlignment = xlCenter 
.Range("A21:F21").Font.Bold = True 
End With 

j = 22 

For Each sh In ActiveWorkbook.Sheets 
    If sh.Name <> "Order List" And sh.Name <> "INDEX" And sh.Name <> "SELECTOR" Then 
     lastRow = sh.Cells(sh.Rows.Count, "B").End(xlUp).Row 
     For i = 28 To lastRow 
      If sh.Range("G" & i) > 0 And sh.Range("G" & i) <> "QUANTITY" Then 
       sh.Range("b" & i).Copy Destination:=Worksheets("Order List").Range("A" & j) 
       sh.Range("e" & i & ":g" & i).Copy Destination:=Worksheets("Order List").Range("B" & j) 
       Sheets("Order List").Range("E" & j) = Sheets("Order List").Range("C" & j) * Sheets("Order List").Range("D" & j) 
       Sheets("Order List").Range("F" & j) = sh.Name 
       Sheets("Order List").Range("B" & j + 1) = "" 
       Sheets("Order List").Range("B" & j + 2) = "VAT" 
       Sheets("Order List").Range("E" & j + 1) = "" 
       Sheets("Order List").Range("E" & j + 2) = Application.WorksheetFunction.Sum(Columns("E:E")) * 0.2 
       Sheets("Order List").Range("B" & j + 3) = "TOTAL" 
       Sheets("Order List").Range("E" & j + 3) = Application.WorksheetFunction.Sum(Columns("E:E")) 


       j = j + 1 
      End If 
     Next i 
    End If 
Next sh 
+0

Dans votre résumé de la colonne E vous ne définissez pas la feuille que vous êtes summi ng –

+0

Après avoir défini, il montre toujours une mauvaise réponse. –

+0

vous additionnez 'toute la colonne E'. c'est ce que tu veux vraiment? – jsotola

Répondre

0

Vous ne devez pas utiliser la somme de la colonne entière. Au lieu de la TVA:

Application.WorksheetFunction.Sum(Columns("E:E")) * 0.2 

Utilisation:

Application.WorksheetFunction.Sum(Range("E22", "E" & j)) * 0.2 

et au lieu de la TOTAL:

Application.WorksheetFunction.Sum(Columns("E:E")) 

Utilisation:

Application.WorksheetFunction.Sum(Range("E22", "E" & j + 2)) 
+0

Je pense que ce ** pourrait être ce que l'OP est après, mais ne fonctionnera que si vous qualifiez vos objets 'Range' en disant' Sheets ("Order List"). Range ... '. Sans cette qualification, il s'agira d'additionner des valeurs sur n'importe quelle feuille active qui peut ou non être une "liste de commande". – YowE3K

+0

vous avez raison. Je dois ajouter un nom de feuille dessus. Merci beaucoup –