2017-08-22 55 views
-1

我正在構建一個宏,它將通過從另一個行提取數據來創建一個自動報告(報告表的名稱是「RCCP INPUT」)工作表(來源名爲「CW33 17」)。我已經構建了針對源表單的一行運行的代碼,因此它只爲一行創建報表(每行表示一個訂單)。我想有一個行範圍的報告,所以我需要擴展我的代碼來申請一系列的行。因此,可以說這個範圍被稱爲myRange,它包括第2到第70行。所以,我的報告必須包含所有這些行。我的代碼在下面提供。我也包含了標題,因此報告從第2行開始。宏現在運行的行是第2行。爲了更清楚地說明,報告必須將從源中選擇的每行都乘以6 (6個副本,一個在另一個下方),因爲它可以從下面的宏中看到,因爲在預測列和預測數量列中,每個訂單(行)必須具有6周的值。我希望我已經澄清了!任何想法如何使它工作?..我迄今失敗悲慘..非常感謝!爲單行的代碼創建一系列行的循環

報告看起來像這樣(對於一行 - 因爲它乘以6),其他行應該以相同的方式放置在下面。

Report interface for one row

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 
+1

「到目前爲止,我已經慘敗失敗......要在我的問題上找到答案「。看着你的個人資料,你很難接受任何答案。 – cyboashu

+2

我看到你在這段代碼中使用我的答案。然而你沒有接受我的回答。 –

+0

@ScottCraner我upvoted的評論:)它真的很有幫助!除了upvoting我怎麼能接受它? –

回答

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...循環之後是一個錯誤的出發,但我不知道,所以才保留了它你有它的方式)