VBA将数据复制到基于标准将数据复制到新工作簿

时间:2011-09-24 13:08:25

标签: excel vba

我有2个工作簿 - 数据文件(Sheet:Andhra Pradesh)&发票文件(在最后一张发票之后添加新发票)。

我想使用数据工作簿中的数据透视表在发票工作簿中创建发票。每1张发票1个采购订单编号。

例如:第9B行DO3566521将被复制到Invoice工作簿中的新Invoice 300中,其中包含以下信息:

  • 订单关闭日期(A9)将被复制到I16
  • PO号DO666(B9)将被复制到B31,
  • 订单ID 1234(C9)将被复制到A34,
  • 规格名称 - 要复制到B34的3个项目(E9:E11):B36,
  • 发票数量(F9:F11)将被复制到G34:G36,
  • 发票金额(G9:G11)将被复制到I34:36

  • PO编号DO667(B12)应复制到另一个新的Invoice 301(要在Invoice工作簿中添加的新工作表301)...

我可以使用发票工作簿添加/复制新工作表,但我无法复制数据和文件。写循环函数。如果是不同的PO,如何创建新发票?任何帮助将不胜感激!!

顺便说一句,我还有一个宏(Sub Get_Spelling())可以将数字转换为发票工作表(A55)中的单词。只是想知道如何将它们连接在一起,以便在创建发票时自动更新。

数据工作簿 - 工作表名称: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 

发票工作簿 - 工作表名称:发票编号(例如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

这是我的代码:

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

1 个答案:

答案 0 :(得分:1)

我对你提出的一些问题感到困惑,但是下面的内容应该有效。只需根据您的需求进行调整。

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

如果我是你,我会将原始工作簿中的值传递给变量数组,然后使用for循环读取它们。如... ..

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

这应该让你开始。

相关问题