2016-09-23 39 views
0

首先,我需要爲標題道歉,我無法找到相關的標題!複製/粘貼用偏移量優化的代碼?

我無法優化以下代碼。 此宏的目標是將值從一個工作簿導入到另一個工作簿。

Workbook1是源文件,Workbook2是目標文件。

我想要做的是避免重複代碼,尤其是因爲源報表的長度每天都會改變,但是我需要提取的值總是被87行抵消(例如:在查看C30之後I需要去C117,C204,C291 ...對於C7,C86和F45是相同的,這是我需要導出的第一組值,下一個是C94,C173,F132等等)。

lMaxRows = Cells(Rows.Count, "B").End(xlUp).Row 

If wbkWorkbook1.Worksheets("SC_Server").Range("C30") > 0 Then 
wbkWorkbook2.Worksheets("StaffCaf").Range("B" & lMaxRows + 1) = _ 
wbkWorkbook1.Worksheets("SC_Server").Range("C7") 

wbkWorkbook2.Worksheets("StaffCaf").Range("F" & lMaxRows + 1) = _ 
wbkWorkbook1.Worksheets("SC_Server").Range("C86") 

wbkWorkbook2.Worksheets("StaffCaf").Range("N" & lMaxRows + 1) = _ 
wbkWorkbook1.Worksheets("SC_Server").Range("F45") 
End If 

If wbkWorkbook1.Worksheets("SC_Server").Range("C117") > 0 Then 
wbkWorkbook2.Worksheets("StaffCaf").Range("B" & lMaxRows + 1) = _ 
wbkWorkbook1.Worksheets("SC_Server").Range("C94") 

wbkWorkbook2.Worksheets("StaffCaf").Range("F" & lMaxRows + 1) = _ 
wbkWorkbook1.Worksheets("SC_Server").Range("C173") 

wbkWorkbook2.Worksheets("StaffCaf").Range("N" & lMaxRows + 1) = _ 
wbkWorkbook1.Worksheets("SC_Server").Range("F132") 

我希望我的解釋是明確的:)提前

感謝您的幫助

回答

0

添加聲明到列表中。

您可以使用一個循環,並告訴它一次有多少跳過。 Step 87告訴循環每次跳轉87次。

我也把你的工作表放入變量中,並使用With塊來保存輸入。

從那裏,它只是數學得到正確的單元格。

Dim ws1 As Worksheet 
Dim ws2 As Worksheet 
Dim i As Long 


Set ws1 = wbkWorkbook1.Worksheets("SC_Server") 
Set ws2 = wbkWorkbook2.Worksheets("StaffCaf") 
With ws1 
    For i = 30 To .Range("C" & .Rows.Count).End(xlUp).Row Step 87 
     lMaxRows = ws2.Cells(ws2.Rows.Count, "B").End(xlUp).Row 

     If .Range("C" & i) > 0 Then 
      ws2.Range("B" & lMaxRows + 1) = .Range("C" & i - 23) 
      ws2.Range("F" & lMaxRows + 1) = .Range("C" & i + 56) 
      ws2.Range("N" & lMaxRows + 1) = .Range("F" & i + 15) 
     End If 
    Next i 
End With 
+0

非常感謝Scott,作品非常棒!一個問題,你是什麼意思「添加聲明到你的列表」? –

+0

將Dim語句移至您聲明其他變量的位置。 –

+0

好吧,我看到:)再次感謝你 –