2015-04-14 143 views
0

我从Sheet“P & L”(保存所有数据的第一个选项卡)开始记录一个宏,并在当前表单中过滤掉直到A列中的数据用完为止。有用;但是,我需要此代码才能用于其余工作表。这些每月更新。在每张表格的A列中会有不同数量的输入。这些都是我用来从P & L选项卡查找信息的ID号。在多张表中复制VLOOKUP宏

当我把这个宏写成FoorLoopIndex时,我总是收到“编译错误:无效或不合格”的消息。

我对宏没有任何经验 - 我正在努力寻找我的错误。

Sub update_gp_profits() 

Dim StartIndex, EndIndex, LoopIndex As Integer 
StartIndex = Sheets("P&L").Index + 1 
EndIndex = Sheets("Sheet4").Index - 1 

For LoopIndex = StartIndex To EndIndex 

lastrow = .Range("A" & .Rows.Count).End(xlUp).Row 

.Range("B2:B" & lastrow).Formula = "=+VLOOKUP(RC[-1],'P&L'!R15C3:R29702C4,2,FALSE)" 
    Range("C2").Select 
.Range("C2:C" & lastrow).Formula = "=+VLOOKUP(RC[-2],'P&L'!R15C3:R29702C5,3,FALSE)" 
    Range("D2").Select 
.Range("D2:D" & lastrow).Formula = "=+VLOOKUP(RC[-3],'P&L'!R15C3:R29702C6,4,FALSE)" 
    Range("E2").Select 
.Range("E2:E" & lastrow).Formula = "=+VLOOKUP(RC[-4],'P&L'!R15C3:R29702C17,15,FALSE)" 
    Range("F2").Select 
.Range("F2:F" & lastrow).Formula = "=+VLOOKUP(RC[-5],'P&L'!R15C3:R29702C18,16,FALSE)" 
    Range("J2").Select 
.Range("k2:k" & lastrow).Formula = "=+VLOOKUP(RC[-10],'P&L'!R15C3:R29702C160,158,FALSE)" 
Range("k2").Select 

Next LoopIndex 
End Sub 
+0

在你的代码中列出上面,我没有看到任何为sheet1和sheet2。我看到'Sheets(“P&L”)和'Sheets(“Sheet4”)'请修改这个问题。 thx – Hiten004

+0

@ Hiten004 - 我更新了说明。感谢您的帮助 – ja2255

+0

为什么在VLookup前面使用+符号? – teylyn

回答

0

试试这个,

Sub update_gp_profits() 
Dim ws As Worksheet 
Dim rng As Range 
Dim lRow As Long 

Set ws = ActiveSheet 
     ' 
    With ws 
      lRow = ws.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row ' Last row 

      Set rng = .Range("A2" & ":" & "A" & lRow) ' This is your range 
       rng.Offset(0, 1).FormulaR1C1 = "=VLOOKUP(RC[-1],'P&L'!R15C3:R29702C4,2,FALSE)" 
       rng.Offset(0, 2).FormulaR1C1 = "=VLOOKUP(RC[-2],'P&L'!R15C3:R29702C5,3,FALSE)" 
       rng.Offset(0, 3).FormulaR1C1 = "=VLOOKUP(RC[-3],'P&L'!R15C3:R29702C6,4,FALSE)" 
       rng.Offset(0, 4).FormulaR1C1 = "=VLOOKUP(RC[-4],'P&L'!R15C3:R29702C17,15,FALSE)" 
       rng.Offset(0, 5).FormulaR1C1 = "=VLOOKUP(RC[-5],'P&L'!R15C3:R29702C18,16,FALSE)" 
       rng.Offset(0, 10).FormulaR1C1 = "=VLOOKUP(RC[-10],'P&L'!R15C3:R29702C160,158,FALSE)" 

      Debug.Print rng.Address 
    End With 

End Sub 
+0

真棒 - 它通过活动工作表而不是更新每个工作表。谢谢你的帮助! @chito – ja2255

0

试试下面的代码它将循环所有的sheet4行。在2010处排 最大NUM = https://stackoverflow.com/a/527026/1411000 https://stackoverflow.com/a/527026/1411000

Sub update_gp_profits() 

Dim StartIndex, EndIndex, LoopIndex As Integer 
StartIndex = Sheets("Sheet4").).Index + 1 
EndIndex = 1048576  
For LoopIndex = StartIndex To EndIndex 

lastrow = .Range("A" & .Rows.Count).End(xlUp).Row 

.Range("B2:B" & lastrow).Formula = "=+VLOOKUP(RC[-1],'P&L'!R15C3:R29702C4,2,FALSE)" 
    Range("C2").Select 
.Range("C2:C" & lastrow).Formula = "=+VLOOKUP(RC[-2],'P&L'!R15C3:R29702C5,3,FALSE)" 
    Range("D2").Select 
.Range("D2:D" & lastrow).Formula = "=+VLOOKUP(RC[-3],'P&L'!R15C3:R29702C6,4,FALSE)" 
    Range("E2").Select 
.Range("E2:E" & lastrow).Formula = "=+VLOOKUP(RC[-4],'P&L'!R15C3:R29702C17,15,FALSE)" 
    Range("F2").Select 
.Range("F2:F" & lastrow).Formula = "=+VLOOKUP(RC[-5],'P&L'!R15C3:R29702C18,16,FALSE)" 
    Range("J2").Select 
.Range("k2:k" & lastrow).Formula = "=+VLOOKUP(RC[-10],'P&L'!R15C3:R29702C160,158,FALSE)" 
Range("k2").Select 

Next LoopIndex 
End Sub