0

我用客户数据填写了一个名为“信息”的工作表。然后我手动将相同的客户数据复制到另一个工作表“订单”。“订单”包含发票编号和如下结构:

      A           D           E               F            H         J
    INVOICE   FIRSTNAME   LASTNAME        DESCRIPTION   POSTCODE   EMAIL
1    1234       Fred       Smith         Red widget      AR225H   fred@smith.com
2    1235       Bill       Jones         Blue widget     EH66VT   bill@jones.com
3    1236
4    1237

我希望创建一个宏来将我的数据从“信息”逐个单元格地复制到“订单”。我可以这样做,但我需要一个条件注释,说明“如果订单列 D 为空白,则选择第 3 行将数据复制到”。如果我没有这个,那么我会覆盖最后一个订单行。

请注意,每次“信息”表上的客户数据都会更改,这就是我手动复制它的原因。

我目前使用这个公式将下一个可用的发票编号拉入我的信息表:

=INDEX(订单!$A:$A,COUNTA(订单!$D:$D)+1)

它允许我在“信息”表上有一个单元格(比如 F3),该单元格已经包含正确的发票编号以分配给当前的客户数据。使用它,我可以将条件重写为“将信息粘贴到 Info!F3 出现在 Orders! 列 A 中的行中”。

如果有帮助,这里是宏:

Sub Macro2()
'
' Macro2 Macro
'

'
    Range("B6").Select
    Selection.Copy
    Sheets("Orders").Select
    Range("C735").Select
    ActiveSheet.Paste
    Sheets("Info").Select
    Range("B7").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Orders").Select
    Range("D735").Select
    ActiveSheet.Paste
    Sheets("Info").Select
    Range("B8").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Info").Select
    Range("B11").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Orders").Select
    Range("E735").Select
    ActiveSheet.Paste
    Sheets("Info").Select
    Range("B12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Orders").Select
    Range("F735").Select
    ActiveSheet.Paste
    Sheets("Info").Select
    Range("B15").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Orders").Select
    Range("G735").Select
    ActiveSheet.Paste
    Sheets("Info").Select
    ActiveWindow.SmallScroll Down:=-6
    Range("B3").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Orders").Select
    Range("B735").Select
    ActiveSheet.Paste
End Sub

===================

也许这个问题的信息太多了?在最简单的形式中,我只需要根据单元格的内容选择一行,然后通过宏将信息粘贴到该行。

===================

更新 - 这是“信息”表布局,请注意并非所有行都与“订单”表中的列匹配:

    A                             B                C

                          Invoice number:        1236

Peter 
Parker
12
Overflow Road
Stacktown
BB338J
0121 345 6789
0777 789 789
peter@spidermail.com

Order description:          Red widget
4

1 回答 1

1

我喜欢虚构的地址!

我测试了这段代码,它可以工作。您可能需要更改单元格引用,尤其是在工作Info表中以获取正确的数据。

简而言之,您从工作Info表开始,将相关数据保存在变量中,找到发票编号,Orders然后粘贴数据。

Sub InfoToOrders()
    Dim InvoiceNo As Long, FirstName As String, LastName As String, Description As String, Postcode As String, Email As String

    With Worksheets("Info")
        InvoiceNo = .Range("D1")
        FirstName = .Range("A3")
        LastName = .Range("A4")
        Description = .Range("B13")
        Postcode = .Range("A8")
        Email = .Range("A11")
    End With

    Dim InvoiceNumbers As Range, invoice As Range

    With Worksheets("Orders")

        Set InvoiceNumbers = .Range("A1:A" & .Range("A1").End(xlDown).Row)

        For Each invoice In InvoiceNumbers
            If invoice = InvoiceNo Then
                invoice.Offset(0, 1) = FirstName
                invoice.Offset(0, 2) = LastName
                invoice.Offset(0, 3) = Description
                invoice.Offset(0, 4) = Postcode
                invoice.Offset(0, 5) = Email
            End If
        Next invoice

    End With
End Sub
于 2013-03-08T18:09:49.610 回答