我用客户数据填写了一个名为“Info”的工作表。然后我手动将相同的客户数据复制到另一个工作表“订单”。 “订单”包含发票编号和类似的结构:
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
答案 0 :(得分: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