2011-09-24 5 views
2

J'ai 2 classeurs - Fichier de données (feuille: Andhra Pradesh) & Fichier de facture (nouvelle facture à ajouter après la dernière facture).VBA copier des données pour copier des données dans un nouveau classeur basé sur des critères

Je souhaite utiliser le tableau croisé dynamique dans le classeur de données pour créer une facture dans le classeur de facture. 1 numéro de commande par 1 facture.

Par exemple: la ligne 9B DO3566521 sera copiée dans une nouvelle facture 300 dans le classeur facture avec les informations suivantes:

  • Date de commande fermé (A9) à copier dans I16
  • PO Numéro DO666 (B9) à copier dans B31,
  • Numéro de commande 1234 (C9) à copier dans A34,
  • Nom Spec - 3 articles (E9: E11) à copier dans B34: B36,
  • facture Quantité (F9: F11) à copier dans G34: G36,
  • Montant de la facture (G9: G11) à copier dans I34: 36

  • Numéro PO DO667 (B12) doit être copié dans une autre nouvelle facture 301 (une nouvelle feuille de calcul 301 à ajouter dans le classeur facture). ..

je peux obtenir le classeur facture pour ajouter/copier une nouvelle feuille de calcul, mais je vais avoir la copie de la difficulté sur les données & écrire la fonction de boucle. comment créer une nouvelle facture s'il s'agit d'un bon de commande différent? Toute aide serait très appréciée!! Par ailleurs, j'ai également une macro (Sub Get_Spelling()) pour convertir les nombres en mots dans la feuille de calcul de facture (A55). Je me demande simplement comment je peux les joindre ensemble afin qu'il soit mis à jour automatiquement lorsque la facture est créée.

classeur de données - Nom de la feuille: Andhra Pradesh

A9    B9  C9   D9  E9  F9 G9 
Order Closed Date PO Number Order ID Item Index Spec Name Qty Invoice Amt 
15/09/11   DO666  1234  1  A   10 $100 
             2  B   20 $200 
             3  C   30 $300 
        DO667  567   1  L   40 $100 
             2  K   50 $200 

classeur facture - Nom de la feuille: Numéro de facture (par ex Inv 300)

B31 
PO Number DO666 
A34  B34   G34  I34 
Order ID Spec Name  Qty  Invoice Amt 
1234  A   10  $100 
      B   20  $200 
      C   30  $300 

Invoice 301 
B31 
PO Number: DO667 

Voici mon code:

Option Explicit 

Sub Create_Invoice() 
Dim oldsheet As Worksheet 
Dim newSheet As Worksheet 
Dim oldnumber As Integer 
Dim newnumber As Integer 
Dim databook As Workbook 
Dim datasheet As Worksheet 
Dim invbook As Workbook 
Set databook = ActiveWorkbook 
Set invbook = ActiveWorkbook 

Application.Workbooks.Open ("C:\Users\Owner\Desktop\New folder\AP VAT Inv 201 -.xls") 
'Set invbook = ActiveWorkbook 

oldnumber = ActiveSheet.Name 
newnumber = oldnumber + 1 

ActiveSheet.Copy After:=ActiveWorkbook.ActiveSheet 
Set newSheet = ActiveSheet 

ActiveSheet.Name = newnumber 
ActiveSheet.Range("I15").Value = newnumber 
ActiveSheet.Range("I16") = databook.Sheets("Andhra Pradesh").Range("A9") 

MsgBox "Invoices have been created successfully" 
ActiveWorkbook.Save 

End Sub 

Répondre

1

Je suis un peu confus par certains de ce que vous demandez, mais quelque chose du genre devrait marcher. Juste l'adapter à vos besoins.

Sub Main() 
Dim wkbook As Workbook 
Set wkbook = Workbooks.Add 

If Len(dir(***Your Directory Path *****, vbDirectory)) = 0 Then 
    MkDir ***Your Directory Path ***** 
End If 

With wkbook 
    .Title = "Workbook Title" 
    .Subject = "Workbook Subject" 
    .SaveAs FileName:= ***Your Directory Path *****\"Workbook Title.xls" 
End With 

With wkbook.Worksheets("Sheet1") 
.Range("I16") = **Your Original Worksheet**.Worksheets("Sheet1").Range("A1").value 
'repeat for all values 
end with 

wkbook.save 
wkbook.close 
end sub 

Si je vous, je passe vos valeurs dans le classeur d'origine à un tableau de variantes, puis lu à travers eux avec une boucle. Comme dans ..

dim myValues as Variant 
dim I as Integer 

myValues = Worksheets("Sheet1").Range("A9:G11").Value 

for I = LBound(myValues) to Ubound(myvalues) 
'do work here (See the with wkbook statement above) 
next I 

Cela devrait vous aider à démarrer.

Questions connexes