我有数据要从表1("发票")复制到表2("库存")。我只需要复制1个由发票号码组成的单元格(" 1,2,3等等#34;)。 我已经成功复制(Invoice.D14)并粘贴单元格(Inventory.B4)但是我需要自动填充到表2中的另一列(Inventory.D4)("库存")。请参阅我的代码如下:
Dim Outgoing As Worksheet
Dim Invoice As Worksheet
Set Outgoing = ActiveWorkbook.Worksheets("Inventory")
Set Invoice = ActiveWorkbook.Worksheets("Invoice")
Invoice.Range("D14").Copy
Outgoing.Cells(Rows.Count, 1).Range("B1").End(xlUp).Offset(1, 0).PasteSpecial
With Range("B4").Resize(4)
.Value = [B4]
.AutoFill .Resize(Range("C" & Rows.Count).End(xlUp).Row - 1)
End With
它不断出现错误消息。 有人可以帮忙吗?
编辑信息
我已经从表1(" Invoice")复制到表2("库存")。 在表1(" Invoice")中包含:
我将上述数据复制到表2("库存")并详细说明:
如果我在数据代码上输入3个代码,它将复制到具有3个代码的库存(3行),但是因为我只复制1个单元格用于事务ID,所以Inventory上的输出也只有1个单元格。
我需要的是自动填充交易ID,只要我先前输入的数据代码。但是,如果我使用自动填充功能,我就不知道它为什么总是显示错误信息。所以我尝试了另一种方式,复制第一个交易ID。
我也尝试下面的代码:
Sub Outgoing_Data()
Dim Inventory As Worksheet
Dim Invoice As Worksheet
Dim columnB As Range
Dim columnD As Range
Dim c As Range
Dim i As Long
Dim lastNonEmptyRow As Range
Set Outgoing = Worksheets("Inventory")
Set Invoice = Worksheets("Invoice")
Set columnB = Range("B:B")
Set columnD = Range("D:D")
Invoice.Range("B21:B27").Copy
Outgoing.Cells(Rows.Count, 1).Range("D1").End(xlUp).Offset(1, 0).PasteSpecial
Invoice.Range("D14").Copy
Outgoing.Cells(Rows.Count, 1).Range("B1").End(xlUp).Offset(1, 0).PasteSpecial
i = 5
Set lastNonEmptyRow = Outgoing.Range(Cells(i - 1, 2), Cells(i - 1, 2))
For Each c In columnD.Cells
If c.Value2 = "" Then Exit For
i = i + 1
Next c
Do While columnD(i) <> ""
lastNonEmptyRow.Copy Range(Cells(i, 2), Cells(i, 2)).PasteSpecial
i = i + 1
Loop
End Sub
我想要的输出:
| transaction_ID |产品编号
| 1 | 2DFGH4
| 1 | 2DFGH7
| 1 | 2HJTY0
| 2 | 1JKTY7
| 2 | 5THSD1
| 3 | 4GHTY9
(不知道如何在这里画一张桌子,但希望你明白我在说什么) 结果,事务ID已经与数据代码一样长。对于第一次试验,它看起来很好。但是,当我更改发票上的交易ID并再次运行而不删除库存数据时,库存上的交易ID仅复制在1个单元格上。对此有什么建议吗?
真的很感激你的答案。 谢谢
答案 0 :(得分:0)
可能是错误的工作表被激活了?尝试:
With Outgoing.Range("B4").Resize(4)
.Value = [B4]
.AutoFill .Resize(Range("C" & Rows.Count).End(xlUp).Row - 1)
End With
修改强>
.AutoFill .Resize(Range("C" & Rows.Count).End(xlUp).Row - 1)
的问题是Rows.Count
返回行的绝对值,计数形式1,而不是4(这是您要引用的行)。因此,如果您始终从B4开始自动填充,简单的-3将对您有用:
.AutoFill .Resize(Range("C" & Rows.Count).End(xlUp).Row - 3)
但是,如果此行会动态更改,您可以将其添加到行计算中,例如:
expectedRow = 8
With Outgoing.Range("B" & expectedRow).Resize(4)
.Value = Range("B" & expectedRow).Value
.AutoFill .Resize(Range("C" & Rows.Count).End(xlUp).Row - expectedRow + 1)
End With
顺便说一句,我不理解.Value = Range("B" & expectedRow).Value
行和Resize(4)
命令With
部分的用途,但我不知道你的数据是什么样的,以及是您的特定目标,因此请尝试删除它并查看输出是否适合您。
答案 1 :(得分:0)
你的目标不是很清楚
试试这个:
Option Explicit
Sub main()
Dim Outgoing As Worksheet
Dim Invoice As Worksheet
Set Outgoing = ActiveWorkbook.Worksheets("Inventory")
Set Invoice = ActiveWorkbook.Worksheets("Invoice")
Invoice.Range("D14").Copy
With Outgoing
With .Cells(Rows.Count, 1).Range("B1").End(xlUp).Offset(1, 0)
.PasteSpecial
.Resize(4).Value = .Value
.Resize(4).AutoFill .Resize(4, 2)
End With
End With
End Sub