我正在构建一个宏,它将通过从另一个工作表(名为" CW33 17& #34)。我已经构建了为源表单行运行的代码,因此它只为一行创建报表(每行代表一个订单)。我想要一个行的报告,所以我需要扩展我的代码以申请一系列行。所以,假设这个范围被称为myRange,它包括第2行到第70行。因此,我的报告必须包含所有这些行。我的代码如下。我也包含了标题,因此报告从第2行开始。宏运行的行现在是第2行。为了更清楚地说明,报告必须从源中选择的每一行乘以6 (6个副本,一个在另一个之下),从下面的宏可以看出,因为在预测列和预测数量列中,每个订单(行)必须具有6周的值。我希望我已经澄清了!任何想法如何让它发挥作用?..到目前为止,我已经悲惨地失败了......非常感谢!
报告看起来像这样(一行 - 因为它乘以6),其他行应该以相同的方式放在下面。
Sub RCCP_INPUT()
Sheets("RCCP INPUT").Select
range("C1").Value = "T-Lane ID" 'Column C
range("D1").Value = "Week of RCCP" 'Column D
range("E1").Value = "Forecast" 'Column E
range("F1").Value = "Forecast Quantity" 'Column F
Sheets("CW33 17").Select
range("D2:E2").Copy
Sheets("RCCP INPUT").Select
range("A2").Select
ActiveSheet.Paste
Dim rws As Long
With range("A2:B2")
rws = .Rows.Count
.Resize(rws).Copy Destination:=.Offset(rws).Resize(rws * 5)
End With
range("C2").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-2],RC[-1])"
ActiveCell.Value = ActiveCell.Value
With range("C2")
rws = .Rows.Count
.Resize(rws).Copy Destination:=.Offset(rws).Resize(rws * 5)
End With
Sheets("CW33 17").Select
range("G2:L2").Select
Selection.Copy
Sheets("RCCP INPUT").Select
range("F2:F7").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Sheets("RCCP INPUT").Select
i = 1
For Each cell In range("E2:E7")
cell.Value = "Week +" & i
i = i + 1
Next cell
Sheets("RCCP INPUT").Select
range("E2").Value = Sheets("CW33 17").range("G2").Value - 1
With range("E2")
rws = .Rows.Count
.Resize(rws).Copy Destination:=.Offset(rws).Resize(rws * 5)
End With
End Sub
答案 0 :(得分:0)
为了概括你的代码,你需要以某种方式远离绝对地址。一种方法是分配范围,然后根据需要偏移它们以到达您需要的位置。下面的代码会持续numNeeded
次,并在您提及时直接在下方添加。在第一次通过之后我对源数据一无所知,因此它现在只重复第一组数据。但是,您可以从不同的工作表中绘制新数据,或者使用源表上的偏移量来获取每次的新数据。我在代码中添加了许多r.select
语句,以便您可以单步执行并轻松查看代码正在执行的操作,但是一旦您理解,这些语句就应该删除。
Sub reportGen()
Dim destSh As Worksheet, sourceSh As Worksheet
Dim sourceR1 As Range, sourceR2 As Range
Dim r As Range, pasteR As Range
Const numNeeded = 10
Set sourceSh = Worksheets("CW33 17")
Set sourceR1 = sourceSh.Range("D2:E2")
Set sourceR2 = sourceSh.Range("G2:L2")
Set destSh = Worksheets("RCCP INPUT")
Set r = destSh.Range("A1").Offset(7 * j, 0)
r.Select
r.Offset(0, 2) = "T-Lane ID"
r.Offset(0, 3) = "Week of RCCP"
r.Offset(0, 4) = "Forecast"
r.Offset(0, 5) = "Forecast Quantity"
For j = 0 To numNeeded
Set r = destSh.Range("A2").Offset(j * 6, 0)
r.Select
sourceR1.Copy
destSh.Paste
Set pasteR = Selection
pasteR.AutoFill destSh.Range(pasteR, pasteR.Offset(5, 0))
Set r = r.Offset(0, 2)
r.Select
r.FormulaR1C1 = "=CONCATENATE(RC[-2],RC[-1])"
r = r.Value
r.AutoFill destSh.Range(r, r.Offset(5, 0))
Set r = r.Offset(0, 3)
r.Select
sourceR2.Copy
r.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Set r = r.Offset(0, -1)
r.Select
For i = 1 To 6
r.Offset(i - 1, 0) = "Week +" & i
Next i
r = sourceR2(1) - 1
r.AutoFill destSh.Range(r, r.Offset(5, 0))
r.Select
Next j
End Sub
(顺便说一句,我认为在For Each cell...
循环之后可能会出现错误,因为它会对数据进行写入,但我不确定是否只保留了它的方式)